django admin中的单选按钮

时间:2013-08-14 21:10:50

标签: python django 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

每个问题只能有一个答案。这就是问题所在。我无法弄清楚如何为选项编写管理表单模型使得对于每个问题,只有一个选项可以正确= True。

我可以为每个问题使用单选按钮,但不知道如何限制它们,以便只能为一个外键选择一个。

6 个答案:

答案 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())

您可以参考上面的代码