2

这是一个django模型:

class Question(models.Model):
    text = models.TextField(verbose_name=u'Вопрос')
    is_free_text = models.BooleanField(verbose_name=u'Ответ в виде текста?')
    options = models.ManyToManyField('QuestionOption', related_name='option',null=True, blank=True)

和它使用的选项模型:

class QuestionOption(models.Model):
    text = models.TextField(verbose_name=u'Вариант ответа')
    score = models.IntegerField()

Django 管理员,当您尝试添加新问题时,将显示一个表单,您可以在其中输入问题文本,勾选 is_free_text 复选框和一个包含现有选项的列表框和一个加号图标,让您添加新选项。

有没有办法禁用此行为并强制用户始终添加新选项,而不是能够同时选择现有选项?理想情况下,我不希望他们看到现有的选项,因为这有时会令人困惑。就像一行文本和一个用于得分的文本框和一个加号图标来添加选项文本及其得分的新记录?

我正在尝试尽可能多地利用现有的 django 管理员,我认为我看到这完全按照我在这里想要表达的方式完成,但不记得在哪里。

4

1 回答 1

0

据我了解您的问题,您应该使用InlineModelAdmin

class QuestionOptionInline(admin.StackedInline):
    model = QuestionOption

    extra = 1 # show only one QuestionOption form

    def queryset(self, request):
         # hack: don't show existed QuestionOption
         return QuestionOption.objects.none()

class QuestionAdmin(admin.ModelAdmin):
    fields = ['text', 'is_free_text']
    inlines = [QuestionOptionInline]
于 2012-10-09T14:50:18.110 回答