如何从另一个模型中获取与多体场相关的模型的属性列表?
可以说,我们有三种模型:
class Model1(models.Model):
name=models.CharField(max_length=255)
class Model2(models.Model):
name=models.CharField(max_length=255)
class Model3(models.Model):
name=models.CharField(max_length=255)
modelone=models.ForeignKey(Model1, on_delete=models.CASCADE)
modeltwo=models.ManyToManyField(Model2)
您会看到Model3与model1具有外键关系,与model2具有ManyTomanyField关系。
现在,定义序列化器:
class Model1Serializer(serializers.ModelSerializer):
class Meta:
model=Model1
fields='__all__'
class Model2Serializer(serializers.ModelSerializer):
class Meta:
model=Model2
fields='__all__'
class Model3Serializer(serializers.ModelSerializer):
class Meta:
model=Model3
fields='__all__'
因此,model3的当前序列化值为{'id':1,'name':'abc','modelone':2,'modeltwo':[2,3]}
我想要的是:
{'id':1,'name':'abc','modelone':2,'modeltwo':[2,3],'modeltwo_names':['pqr','xyz'],'modelone_name':'mno'}
要使用modelone的名称,我们可以添加
modelone_name=serializers.CharField(source='modelone.name')
但是,我不确定对于ManyToManyField怎么做?
我尝试做:
modeltwo_name=serializers.ListField(child=serializers.CharField(source='modeltwo.name'))
但是,执行上述操作给了我错误:
AssertionError: The
来源argument is not meaningful when applied to a
子= field. Remove
来源= from the field declaration.
答案 0 :(得分:0)
您可以在Model2Serialize
中添加Model3Serializer
,其中将包含您需要的所有相关字段:
class Model3Serializer(serializers.ModelSerializer):
modeltwo = Model2Serialize(many=True)
modelone = Model1Serialize(many=False)
class Meta:
model=Model3
fields='__all__'
输出将类似于:
{
'id':1,
'name':'abc',
'modelone':{
'id'=1,
'name'='anyyyyy'
},
'modeltwo':[
{
'id' = 1,
'name' = 'foo'
},
{
'id' = 2,
'name' = 'foo'
}
]
}
这是文档Nested relationships。希望获得帮助。