从另一个模型继承DateField(Django)

时间:2014-09-18 08:48:45

标签: django django-models

我有一个Django数据库存储'剧集'和'评论'。每集都有标题,日期和一组评论。每个评论都有一个标题,一个分数,并且必须属于一集。我还希望审核从其所属的剧集继承DateField。

我知道没有'需要'为此,每个评论的日期可以通过ForeignKey与其所属的剧集交叉引用来找到。我只是问这可以做到以及怎么做?

我的示例models.py代码:

class Episode(models.Model):
    title = models.CharField(max_length=100)
    date = models.DateField()

class Review(models.Model):
    title = models.CharField(max_length=100)
    score = models.FloatField()
    episode = models.ForeignKey(Episode)

因此,我希望在名为Review的{​​{1}}中添加一个属性,该属性在创建时都会从date继承日期。

2 个答案:

答案 0 :(得分:0)

你有一个关于回顾的外国关键指向Episode吗?如果没有,你应该添加它。

然后,您可以简单地遍历该关系,以便在您进行审核时从“情节”中获取日期。无需在Review上添加日期字段。

答案 1 :(得分:0)

您可以使用class Meta: abstract = True

class DateModel(models.Model):
    date = models.DateField()
    # you could in fact include the title field here as well
    # since they have that in common too. 

    class Meta:
        abstract = True


class Episode(DateModel):
    title = models.CharField(max_length=100)


class Review(DateModel):
    title = models.CharField(max_length=100)
    score = models.FloatField()
    episode = models.ForeignKey(Episode)

Episode和Review将从DateModel继承日期字段,这比向两个模型本身添加日期字段更简洁。我假设您希望保持这两个字段同步?因此,每当您更新Episode时,您还需要更新Review,反之亦然。所以更好的选择是保持标准化模型,就像你从一开始就拥有的那样。

您提到要在创建Episode时添加此属性。 Signals可以为您做到这一点。