在Django和REST中处理模型继承

在Django和REST中处理模型继承,django,django-models,django-rest-framework,Django,Django Models,Django Rest Framework,我试图实现以下模型结构: class X(models.Model): class Meta: abstract = True objects = InheritanceManager() agroup = models.ForeignKey(A, related_name="%(class)s_set") xfield = models.CharField() class A(models.Model): class Y(X):

我试图实现以下模型结构:

class X(models.Model):
    class Meta:
        abstract = True

    objects  = InheritanceManager()
    agroup   = models.ForeignKey(A, related_name="%(class)s_set")
    xfield   = models.CharField()

class A(models.Model):

class Y(X):
    yfield   = models.CharField()

class Z(X):
    zfield   = models.CharField()
第一个问题是,基本X类不能是抽象的,因为我需要能够迭代X的所有子类(Y,Y,Y,Z,Z),所以我需要访问管理器。虽然X是抽象的,但X.objects不起作用

第二个问题是REST序列化程序。我只能引用aseriizer中的x_集,因为它是A.上唯一存在的属性,并且只在嵌套列表中显示xfield。我真正想要的是ASerializer上的y_集和z_集,分别显示yfield和zfield

我可以通过不同的配置(通过删除抽象来迭代子对象,或者通过将FK字段直接放在Y和Z上来分离rest序列化程序中的子对象)来实现其中的一些功能,但决不能同时实现

谢谢。

我坚持认为X是抽象的,然后迭代X的子对象:

for x_child_class in X.__subclasses__():
    for child in x_child_class.objects.all():
        #Do your stuff
只要X是抽象的,类A就应该有y_集和z_集,所以你可以:

class ASerializer(serializers.HyperlinkedModelSerializer):
    y_set = YSerializer(many=True)
    z_set = ZSerializer(many=True)

    class Meta:
        model = A
琐碎,但由于某种原因花了很长时间。



django多态性有帮助吗?