Django relative_name模型继承问题

qcuzuvrc  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(104)

我对模型和反向关系的继承有一个问题。
这里我的模型:

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。
谢谢你的时间。

7d7tgy0s

7d7tgy0s1#

也许一个抽象模型的方法可以帮助你?它看起来或多或少是这样的:

class MyAbstractModel(models.Model):
    """
    An abstract base class with all the fields you
    you need in other models
    """
    name = CharField()
    street1 = CharField()

    class Meta:
        abstract = True

class A(MyAbstractModel):
    owner = ForeignKey('self', null=True, blank=True, related_name='sites')
    designation = CharField()

class B (MyAbstractModel):
    owner = ForeignKey(A, null=True, blank=True, related_name='sites')

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)

字符串

相关问题