Python 在Django Rest框架中序列化相关模型

Python 在Django Rest框架中序列化相关模型,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有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

我有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框架
,希望创建一个视图,在该视图中我可以提供
client\u 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",)

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

在序列化程序字段中,可以使用
参数指定模型上的字段。如果试图从客户机模型访问反向关系,则应使用上的
MODELNAME\u set
字段作为源。Django将此字段添加到ForeignKey的另一端。即

assignment = PrimaryKeyRelatedField(
    source='clientassignment_set',
    many=True,
    read_only=True,
)
请注意,使用
read_only=True
也不需要指定查询集


您的另一个选择是在您的外键上指定一个覆盖自动生成的
MODELNAME\u集的
related\u name
字段,并将这些字段设置为“assignment”和“detail”。

我的
Meta.model
属性是什么
Client
?没错,您的Metal.model仍然是Client。这给了我一个
“Client”对象没有属性“assignment”的错误。我假设这是因为基本
客户机
模型没有
赋值
字段,这就是为什么您应该在赋值序列化器字段上使用source属性来指定赋值序列化器字段应该使用模型上的
clientassignment\u set
字段这给了我一个类型为的
对象“RelatedManager”不是JSON可序列化的
错误,我不知道如何解决。