多对多字段的自定义管理员

时间:2012-01-13 15:07:36

标签: django many-to-many

我有一个模型Question,它可以有几个Answer个实例,每个实例都有一个给定的系数。

我想要的是一个管理员,我可以在其中添加尽可能多的答案,并在每次添加一个时创建一个新答案。

我尝试使用多对多字段,如下所示,但默认管理员是一个多项选择,包含数据库中的所有答案。

我想要的理想选择是在我的问题管理员中添加一个“添加答案”按钮,这样我就可以创建一个新答案并将其添加到我的问题中。

我怎样才能做到这一点?

由于

class Question(models.Model):
    answer = models.ManyToManyField(Response)

class Answer(models.Model):
    text = models.TextField()
    coefficient = models.IntegerField()

1 个答案:

答案 0 :(得分:0)

我想您可能对Admin Inlines表单感兴趣。

在这种情况下,您需要删除ManyToMany字段并添加 一个ForeignKey字段到你的答案模型,然后告诉管理员 将“内联”管理表单添加到问题管理员视图中。

models.py

class Question(models.Model):
    ...


class Answer(models.Model):
    question = models.ForeignKey(Question)
    text = models.TextField()
    coefficient = models.IntegerField()

admin.py

class AnswerInline(admin.StackedInline):
    model = Answer


class QuestionAdmin(admin.ModelAdmin):
    inlines = [AnswerInline,]

这应该完全符合您的要求。

在Question对象中,您将拥有一个行为类似的'answer_set'对象 一个ManyToMany处理程序。

以下示例说明如何获取包含与您的问题相关的所有答案的查询集。

my_question.answer_set.all()