Python 在Django Rest框架中序列化相关模型
我有django模型,简化为: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
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可序列化的
错误,我不知道如何解决。