[英]Radio buttons in django admin
我正在 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
每个问题只能有一个答案。 这就是问题所在。我一直无法弄清楚如何为Option模型编写管理表单,以便
我可以为每个问题使用单选按钮,但不知道如何限制它们,以便只能为一个外键选择一个。
我不确定如何通过反向查找来完成。
我知道这不完全是您想要的,但非常接近。 你可以继续在 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,
]
我理解你的问题是这样的:你想改变你的代码,因为只有一个选项应该是正确的。 为什么不将此行添加到问题:
right_answer = models.ForeignKey(Option)
像这样,您不需要布尔值correct
。 您还可以添加一个管理器,该管理器返回任何可以选择的选项(您覆盖方法get_queryset()
,并且该管理器应该在 get_qeryset(): q.option_set.all()
where q is there 问题。 (没有这个任何选项,虽然它与另一个问题匹配,但可以标记。)
我不确定第二部分是否会起作用,这是否是一种好方法,但第一部分是重要的。
使用具有管理集成的 RadioSelect 小部件。
class SimpleAdmin:
...
form SimpleForm
fields = (..., 'my_option', ...)
...
使用额外选项创建表单:
class SimpleForm(forms.ModelForm):
class Meta:
model = Simple
my_option = ChoiceField(
label = 'Options',
choices = (
(0, 'num 0'),
(1, 'num 1'),
),
initial = 0,
widget = RadioSelect,
)
您可以在此处看到一个类似的示例,其中包含一个图表进入管理区域
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,
)
如果您想在管理面板中选择问题和注册模型,请查看下面的代码。
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
之后执行迁移它将解决您的问题。
欲了解更多信息,请单击此处
options = forms.ChoiceField(choices=GENDER_CHOICES, widget=forms.RadioSelect())
你可以参考上面的代码
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.