【问题标题】:How to show subclass model in Django-admin inline form?如何在 Django-admin 内联表单中显示子类模型?
【发布时间】:2015-04-24 08:38:13
【问题描述】:

我在models.py 中找到了一些模型,如下所示:

class QuestionPackage(models.Model):
    """Question Package"""


class Question(models.Model):
    question_package = models.ManyToManyField(QuestionPackage, blank=True)
    name = models.CharField(max_length=128)
    answer = models.TextField()


class Reading(Question):
    """Reading Question"""


class Writing(Question):
    """Writing Question"""

(阅读和写作之间存在一些差异,但我省略了。)

在admin.py:

class ReadingInline(admin.TabularInline):
    model = Reading.question_package.through


class WritingInline(admin.TabularInline):
    model = Writing.question_package.through


class QuestionPackageAdmin(admin.ModelAdmin):
    inlines = [
        ReadingInline, WritingInline,
    ]

我发现在question package 管理页面的内联表单中,Reading 和Writing 都显示为Question,我无法区分。而且他们没有编辑按钮。

在这种情况下我应该怎么做才能让管理员显示子类模型?

【问题讨论】:

  • 你使用的是哪个 Django 版本?
  • @lapinkoira 我用的是 1.8
  • 你能检查我的答案并显示课堂阅读和课堂写作代码吗?
  • @lapinkoira 我有def __str__() 的所有子类,我认为这是选择框的名称,但不是标题。
  • 那你必须告诉模型它是一个抽象类,我编辑了我的答案

标签: python django django-models django-admin


【解决方案1】:

那么在这种情况下,超类 Question 应该是一个抽象类:

class Question(models.Model):
    question_package = models.ManyToManyField(QuestionPackage, blank=True)
    name = models.CharField(max_length=128)
    answer = models.TextField()

    class Meta:
        abstract = True

https://docs.djangoproject.com/en/dev/topics/db/models/#abstract-base-classes

更多信息在这里Django Admin Interface Does Not Use Subclass's __unicode__()

【讨论】:

  • 感谢您的回答,我有想过这个问题,但是django给了我一个错误,我没有专注于数据库,重建数据库后,抽象类工作!谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-07-29
  • 2021-06-18
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多