如何在Django-admin内联表单中显示子类模型?

时间:2022-09-12 08:51:44

I got some models in models.py like this:

我在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"""

(There are some differences between reading and writing ,but I omit that.)

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

and in admin.py:

在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,
    ]

I found that in question package admin page's inline form, both Reading and Writing shows like Question, I can't tell one from another. and they have no edit button.

我发现问题包管理页面的内联形式,阅读和写作都显示像问题,我不能告诉彼此。他们没有编辑按钮。

What should I do to let admin shows subclass model in this situation? 如何在Django-admin内联表单中显示子类模型?

在这种情况下,我该怎么做让admin显示子类模型?

1 个解决方案

#1


1  

Then in this case the super class Question should be an abstract class:

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

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

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

More info here Django Admin Interface Does Not Use Subclass's __unicode__()

更多信息Django Admin Interface不使用子类的__unicode __()

#1


1  

Then in this case the super class Question should be an abstract class:

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

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

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

More info here Django Admin Interface Does Not Use Subclass's __unicode__()

更多信息Django Admin Interface不使用子类的__unicode __()