【问题标题】:Admin Models do not recognize inherited fields管理模型不识别继承的字段
【发布时间】:2014-05-06 03:00:39
【问题描述】:

我想知道这是否是 django.admin、django 甚至 python 特有的?但是如果我不能访问它们的字段,我真的不明白拥有抽象超类的意义:-)。我是不是做错了什么?

示例: 如果我使用管理界面获取以下模型“模块”,我会收到一个 FieldError,其中包含以下“异常值:为模块指定的未知字段(创建日期)。检查类 ModuleAdmin 的字段/字段集/排除属性”:

class GeneralModel(models.Model):
    creation_date = models.DateTimeField('date of creation', auto_now_add=True)
    edited_date = models.DateTimeField('date of last modification', auto_now=True)

    class Meta:
        abstract = True


class Module(GeneralModel):
    name = models.CharField(max_length=100)
    shortDescription = models.CharField("summary", max_length=100)
    description = models.CharField("description", max_length=1500)
    authors = models.ManyToManyField("Author", through="Authorship")

    def __unicode__(self):
        return self.name

使用以下 ModelAdmin 代码:

class ModuleAdmin(admin.ModelAdmin):
    def formfield_for_dbfield(self, db_field, **kwargs):
        formfield = super(ModuleAdmin, self).formfield_for_dbfield(db_field, **kwargs)
        if db_field.name == 'description':
            formfield.widget = forms.Textarea(attrs=formfield.widget.attrs)
        return formfield
    fieldsets = [
        ("General", {"fields": ["name", "shortDescription"]}),
        ("Details", {"fields": ["description", "creation_date"], "classes": ["collapse"]})
    ]

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    您的问题与答案有关: https://stackoverflow.com/a/3594927/3006165

    错误是由于日期具有 auto_now_add=True(或 auto_now=True)。 由于该值是自动的,因此不可编辑,因此不在表单中

    根据文档:

    fields 选项...只有在它们被列出时才可能包含可调用对象 只读字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多