python-3.x 是否可以在Django Rest Framework中执行序列化器关系,其中模型在不同的应用程序上运行?

x33g5p2x  于 2023-06-07  发布在  Python
关注(0)|答案(1)|浏览(130)

我有这两个模型,它们在我的Django Rest Framework(v3.14)项目中的不同应用程序上运行。
我如何实现这个序列化程序?此外,我愿意接受你的建议,如果这是不可能的。TIA
到目前为止我所尝试的:
型号(App1):

class Model1(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    barcode = models.CharField(max_length=100, unique=True, blank=False, null=False)
    shortname = models.CharField(max_length=50, blank=False, null=False)

型号(App2):

class Items(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    transno = models.CharField(max_length=100, blank=True, null=True)
    barcode = models.ForeignKey("app1.Model1", to_field="barcode", db_column="barcode", on_delete=models.CASCADE, related_name="app2_items")

我想做什么?
显示如下输出(在GET请求时):

[
        {
            created: "2023-05-26 00:00:00",
            updated: "2023-05-26 00:00:00",
            transno: "123456",
            model1: {
                created: "2023-05-26 00:00:00",
                updated: "2023-05-26 00:00:00",
                barcode: "123134",
                shortname: ""
            }
        }
    ]
o2g1uqev

o2g1uqev1#

您可以创建两个单独的序列化程序。一个用于Items,另一个用于Model1
app1/serializers.py中:

from rest_framework import serializers

class Model1Serializer(serializers.ModelSerializer):
    class Meta:
        model = Model1
        fields = '__all__'

另一个是app2/serializers.py

from rest_framework import serializers
from app1.serializers import Model1Serializer

class ItemSerializer(serializers.ModelSerializer):
    barcode = Model1Serializer()

    class Meta:
        model = Items
        fields = '__all__'

现在您可以使用ItemSerializer来返回数据沿着条形码的详细信息。

相关问题