2014-01-28 51 views
0

我想实现下面的模型结构:处理模型继承和REST

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序列化程序中。我只能在ASerializer中引用x_set,因为它是A上唯一存在的属性,并且只显示嵌套列表中的xfield。我真正喜欢的是ASerializer上的y_set和z_set以及它们各自的yfield和zfield的显示。

我可以通过不同的配置实现这一点(通过去除抽象或通过将FK字段直接放置在Y和Z上来区分其他序列化器中的子元素来对子元素进行迭代),但绝不会同时进行。

谢谢。

+0

可以django-polymorphic有帮助吗? https://pypi.python.org/pypi/django_polymorphic – dm03514

回答

0

唷!

我坚持了X是抽象的,顺便再遍历X的孩子:

for x_child_class in X.__subclasses__(): 
    for child in x_child_class.objects.all(): 
     #Do your stuff 

而且只要X是抽象的,A类应该有y_set和z_set就可以了,所以你可以:

class ASerializer(serializers.HyperlinkedModelSerializer): 

y_set = YSerializer(many=True) 
z_set = ZSerializer(many=True) 

class Meta: 
    model = A 

琐碎,但由于某种原因需要很长时间。