django管理员中的单选按钮

我正在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模型的管理表单,因此对于每个问题,只有其中一个选项可以有正确的= True。

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


我不确定如何通过反向查找来完成。

我知道这不是你想要的,但是非常接近。 你可以继续在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()其中q是有问题。 (没有这个选项,虽然它与另一个问题相匹配,但可以标记)。

我不确定第二部分是否会起作用,不管它是否是一种好方法,但第一部分是重要的一部分。

链接地址: http://www.djcxy.com/p/56511.html

上一篇: Radio buttons in django admin

下一篇: Change Field of Foreign Key Object