Django声明了子类化模型的类型

时间:2018-03-27 14:16:43

标签: django django-models

我需要为Django中的网站制作一个“投资组合”。我不是要包含图片库和网站链接的投资组合。

我将模型设置为:

class PortfolioObject(models.Model):
    types = (
        (0,"gallery"),
        (1, "link")
    )
    name = models.CharField(max_length=100)
    oType = models.IntegerField(choices=types, default=0)
    class Meta():
        abstract = False

class GalleryObject(PortfolioObject):
    picture = models.FileField(blank=True)
    oType = 0

class LinkObject(PortfolioObject):
     link = models.URLField(blank=True)
    oType = 1

正如您所看到的,我希望PortfolioObject具有“类型”,具体取决于它的类型。但是这不起作用,oType上的LinkObjects属性仍为0。

如何在仍然方便使用PortfolioObject.objects.filter(someField=someFilter)的同时正确索引投资组合对象的类型?

1 个答案:

答案 0 :(得分:0)

您可以覆盖init:

class GalleryObject(PortfolioObject):
    picture = models.FileField(blank=True)
    def __init__(self, *args, **kwargs):
        super(GalleryObject, self).__init__(*args, **kwargs)
        self.oType = 0
    class Meta:
        proxy = True