繁体   English   中英

django admin 中的单选按钮

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM