我有一个模型Question
,它可以有几个Answer
个实例,每个实例都有一个给定的系数。
我想要的是一个管理员,我可以在其中添加尽可能多的答案,并在每次添加一个时创建一个新答案。
我尝试使用多对多字段,如下所示,但默认管理员是一个多项选择,包含数据库中的所有答案。
我想要的理想选择是在我的问题管理员中添加一个“添加答案”按钮,这样我就可以创建一个新答案并将其添加到我的问题中。
我怎样才能做到这一点?
由于
class Question(models.Model):
answer = models.ManyToManyField(Response)
class Answer(models.Model):
text = models.TextField()
coefficient = models.IntegerField()
答案 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()