我正在尝试加入两个序列化器。 我试图获取table_db,否则,我试图插入具有table_db id的other_table列表(从table_db查询)到对象的哪个寄存器中。
这种关系是多对一的,因此,一个other_table有一个table_db,但是,table_db有许多other_table。 在示例中更清楚:
t_db =table_db.objects.all()
data_table_db = table_dbSerializer(t_db,many=True).data
for t in t_db:
o_t_db = other_table.objects.filter(table_db_id=t.pk)
data_other_table= other_tableSerializer(o_t_db,many=True).data
**data = data_table_db + data_other_table ????? //HOW CAN INSERT IT?**
return Response(data, status=status.HTTP_200_OK)
模型
class other_table(models.Model):
table_db = models.ForeignKey(Table_db, on_delete=models.CASCADE, blank=True,null=True)
在table_db中,我没有对other_table的任何引用,因为它有很多引用。
序列化器目前是基本的:
from table_db.models import table_db
from other_table.models import other_table
class other_tableSerializer(serializers.ModelSerializer):
class Meta:
model = other_table
fields = (
)
class table_dbSerializer(serializers.ModelSerializer):
class Meta:
model = table_db
fields = (
)
答案 0 :(得分:3)
您的代码示例有点含糊(对我而言)。因此,我决定为您创建一个通用的。另外,我对模型做了一个简单的更改,在FK字段中添加了 related_name
自变量
# models.py
class Foo(models.Model):
# some fields
...
class Bar(models.Model):
foo = models.ForeignKey(Foo, on_delete=models.CASCADE, blank=True, null=True, related_name='bars')
然后我创建了如下的 嵌套DRF序列化器 ,
# serializers.py
class BarSerializer(serializers.ModelSerializer):
class Meta:
model = Bar
fields = '__all__'
class FooSerializer(serializers.ModelSerializer):
bars = BarSerializer(many=True, read_only=True) # here is the magic happens
class Meta:
model = Foo
fields = '__all__'
然后,只需将 Foo
查询集传递给 FooSerializer
,您将获得所需的响应。
# views.py
def foo_view(request):
foo_qs = Foo.objects.all()
foo_serializer = FooSerializer(foo_qs, many=True)
return Response(foo_serializer.data)
参考
1. What is related_name
used for in Django?
2. FK related_name--Django Doc
3. DRF Nested Serializer