gpt4 book ai didi

python - 在 Django Rest Framework 中序列化相关模型

转载 作者:太空宇宙 更新时间:2023-11-03 14:46:01 24 4
gpt4 key购买 nike

我有简化为的 django 模型:

class Client(models.Model):
name = models.CharField(max_length=255)

def __str__(self):
return self.name


class ClientDetail(models.Model):
client = models.ForeignKey(Client, on_delete=models.CASCADE)
business_format = models.CharField(max_length=255)


def __str__(self):
return "Details for {}".format(self.client.name)


class ClientAssignment(models.Model):
client = models.ForeignKey(Client, on_delete=models.CASCADE)
assignment = models.ForeignKey(Assignment, on_delete=models.CASCADE)


def __str__(self):
return "Assignment: {} for Client: {}".format(self.assignment.name, self.client.name)

class Assignment(models.Model):
name = models.CharField(max_length=255)

def __str__(self):
return self.name

我正在使用 django-rest-framework 并想创建一个 View ,我可以在其中提供 client_id 并接收包含所有 3 个相关模型的序列化对象。我尝试如下使用 PrimaryKeyRelatedField 但我不确定我是否正确使用它。

class CompleteClientObject(ModelSerializer):
assignment = PrimaryKeyRelatedField(many=True, queryset=ClientAssignment.objects)
detail = PrimaryKeyRelatedField(many=True, queryset=ClientDetail.objects)
client = PrimaryKeyRelatedField(queryset=Client)

class Meta:
model = Client
fields = ("id", "name", "detail", "assignment",)

我如何使用序列化程序实现这一点?

最佳答案

在序列化器字段中,您可以使用 source 参数来指定模型上的字段。如果您尝试从客户端模型访问反向关系,您应该使用 MODELNAME_set 字段作为您的来源。此字段由 Django 添加到 ForeignKey 的另一端。即

assignment = PrimaryKeyRelatedField(
source='clientassignment_set',
many=True,
read_only=True,
)

请注意,使用 read_only=True,您也不需要指定查询集。

您的另一种选择是在您的外键上指定一个related_name 字段来覆盖MODELNAME_set 自动生成的字段,并将这些设置为“assignment”和“detail” .

关于python - 在 Django Rest Framework 中序列化相关模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49418578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com