我对模型和反向关系的继承有一个问题。
这里我的模型:
class A(B):
designation = CharField()
class B ():
owner = ForeignKey(A, null=True, blank=True, related_name='sites')
name = CharField()
street1 = CharField()
class C():
name = CharField()
relation_a = ForeignKey(A, related_name='all_elements', null=True, blank=True)
relation_b = ForeignKey(B, related_name='elements', null=True, blank=True)
字符串
首先,我的模型A继承了模型B,用于获取所有地址信息。模型A可以有多个站点(B)
我有另一个模型C,它的外键指向模型A,另一个指向模型B。
对于每个元素B,我想得到所有元素。这个工作很好:
for b in B.objects.all():
print(b.elements.all())
型
对于get all elements,链接到A is work:第一个月
但是我不能只得到元素C通过关系_b与A相关联print(A.elements.all())
个
我的名单是空的。如果我只需要这个元素,我需要通过B模型B.objects.get(id=A.id).elements.all()
这是第一个问题。
其次,我的主要问题是串行化器。
我的序列化器:
A_Serializer(B_Serializer):
class Meta:
model = A
fields = [
'designation',
'street1',
'site',
'all_elements',
'elements',
]
expandable_fields = {
'sites': (B_Serializer, {'many'=True}
'all_elements': (C_Serializer,{'many':True}),
'elements': (C_Serializer,{'many':True}),
}
型
在DRF中,我可以扩展串行器A中的all_elements。我可以解释序列号B中的元素
但是我不能在序列化器A中展开元素。
我尝试在A_serializer中为元素使用SerializerMethodField,但我失去了元素的扩展功能。
我被困在这里了
我怎样才能从我的对象A得到他的元素可扩展。我需要从这个对象A展开他的元素B,并为每个元素B展开元素C。
谢谢你的时间。
1条答案
按热度按时间7d7tgy0s1#
也许一个抽象模型的方法可以帮助你?它看起来或多或少是这样的:
字符串