在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多态性有帮助吗?