django模型继承和管理应用程序

时间:2013-02-27 12:16:25

标签: python django django-grappelli django-tinymce django-filebrowser

我有一个django应用程序,我想在其中使用模型继承。该应用程序包含一个超级模型类Article,这是它的代码

class Article(models.Model):
    english_title = CharField(max_length=200)
    arabic_title = CharField(max_length=200)
    english_body = HTMLField()
    arabic_body = HTMLField()
    enabled = BooleanField()

    def __unicode__(self):
        return self.english_title

    def get_body(self, locale):
        if locale == "ar" :
            return self.arabic_body
        else:
            return self.english_body

    def get_title(self, locale):
        if locale == "ar" :
            return self.arabic_title
        else:
            return self.english_title

并且有一个名为History的子类,它扩展了这个类,这里​​是它的代码

class History(Article, IHasAttachments):
     date = DateField(auto_now_add=True)

我的问题出现在管理应用程序中,当插入新条目时,历史模型中的dateField(日期)不会出现在管理表单中。

注意:我使用的是django-tinymce,djnago-filebrowser和django-grappelli

会出现什么问题?

3 个答案:

答案 0 :(得分:2)

我认为问题出在你的历史模型中,你设置了auto_now_add = True,这会阻止你在admin上显示你的日期字段,请查看有关Model field reference的django文档:

  

按照目前的实现,将auto_now或auto_now_add设置为True将导致该字段具有editable = False和blank = True设置。

关于Field.editable

  

如果为False,该字段将不会显示在admin或任何其他ModelForm中。

如果您希望它可编辑但也有默认值,请尝试以下方法:

class History(Article, IHasAttachments):
    date = DateField(default=datetime.date.today)

答案 1 :(得分:0)

也许是它的继承问题,尝试混合:

http://www.linuxjournal.com/node/4540/print

答案 2 :(得分:0)

如果您添加auto_now=True,则此字段将在每次修改时更新。所以它在逻辑上是正常的,你无法编辑它。

如果您想在创建实例时添加自动日期,我建议您:

from django.utils.timezone import now

class History(Article, IHasAttachments):
     date = DateField(default=now())