我正在django中创建一个测验应用。这是模型:
class Quiz(models.Model): title = models.CharField(max_length=200) description = models.TextField() publish = models.BooleanField(default=False) def __unicode__(self): return self.title class Question(models.Model): quiz = models.ForeignKey(Quiz) question = models.TextField() hint = models.TextField() def __unicode__(self): return self.question class Option(models.Model): question = models.ForeignKey(Question) option = models.CharField(max_length=250) correct = models.BooleanField(default=False) def __unicode__(self): return self.title
每个问题只能有一个答案。这就是问题所在。我无法弄清楚如何为选项编写管理表单模型使得对于每个问题,只有一个选项可以正确= True。
我可以为每个问题使用单选按钮,但不知道如何限制它们,以便只能为一个外键选择一个。
答案 0 :(得分:1)
我不确定如何通过反向查找来完成。
我知道这不是你想要的,但非常接近。 你可以继续在admin.py
中试试这个admin.site.register(Quiz)
#admin.site.register(Option) #Include this if required
class OptionInline(admin.TabularInline):
model = Option
@admin.register(Question)
class QuestionAdmin(admin.ModelAdmin):
inlines = [
OptionInline,
]
答案 1 :(得分:1)
我理解你的问题:你想改变你的代码,因为只有一个选项应该是正确的。 为什么不将此行添加到问题:
right_answer = models.ForeignKey(Option)
像这样,你不需要布尔correct
。你也可以向这个人添加一个管理员,它返回任何应该可以选择的选项(你重写方法get_queryset()
,这个管理者应该在get_qeryset()中有这一行:q.option_set.all()
其中q是问题。 (如果没有这个选项,虽然它与另一个问题匹配,但可以标记。)
我不确定secont部分是否会起作用是否合适,但第一部分是重要部分。
答案 2 :(得分:0)
将RadioSelect小部件与管理员集成一起使用。
emp_id emp_name City Salary
111 aaa pune 60000
222 bbb pune 20000
333 ccc mumbai 30000
444 eee pune 40000
使用其他选项创建表单:
emp_id emp_name City Salary
111 aaa pune 60000
444 eee pune 40000
您可以看到here的类似示例,其中包含进入管理区域的图表
答案 3 :(得分:0)
class FooAdmin:
form FooForm
fields = ('gender', .....)
class FooForm(forms.ModelForm):
class Meta:
model = Foo
gender = ChoiceField(
label = 'Options',
choices = (
(0, 'Male'),
(1, 'Female'),
),
initial = 0,
widget = RadioSelect,
)
答案 4 :(得分:0)
如果您要选择问题并在管理面板中注册模型,请查看下面的代码。
class Question(models.Model):
quiz = models.ForeignKey(Quiz)
question = models.TextField()
hint = models.TextField()
def __unicode__(self):
return self.question
并在Option类中添加要提供的选择
OPTIONS = (
(choice1 : 'choice1'),
(choice2 : 'choice2')
)
class Option(models.Model):
question = models.ForeignKey(Question)
option = models.CharField(max_length=250, choices=OPTIONS)
correct = models.BooleanField(default=False)
def __unicode__(self):
return self.title
执行迁移后,它将解决您的问题。
有关更多信息,Click here
答案 5 :(得分:0)
options = forms.ChoiceField(choices=GENDER_CHOICES, widget=forms.RadioSelect())
您可以参考上面的代码