Django模型继承 - 防止子类实例出现在超类admin中

时间:2013-04-12 21:07:27

标签: django inheritance

我有两个班级:

class Article(ContentAsset):

    title =  models.CharField(max_length=2000)
    author =  models.CharField(max_length=2000, blank=True)
    source = models.CharField(max_length=2000, default="")
    datePublished = models.DateField(default=datetime.now)

    def __unicode__(self):
        return self.title

class PubMedArticle(Article):
    pubMedID = models.CharField(max_length=100)
    abstract = models.TextField(max_length=20000)

所有PubMedArticle实例都显示在管理界面中两次 - 在所有PubMedArticle个对象的列表下,以及所有Article个对象的列表中。这是正常的行为吗?我认为子类通常不会出现在其超类的管理列表中。确保这些PubMedArticle对象仅显示在PubMedArticle管理员列表下的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

这是正常行为。从数据库的角度来看,PubMedArticle的主键只是引用Article表。因此对于PubMedArticle表中的每条记录必须是Article表中的记录。

现在给管理员。有两种方式:

1)制作文章模型abstarct - 如果您不需要所有文章的唯一主键,这是一个好主意。 2)自定义django管理列表查询。