django admin - 强制用户创建新记录,而不是利用现有记录

时间:2012-10-09 14:38:58

标签: python django django-admin django-admin-tools

这是一个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 admin,当您尝试添加新问题时,会向您显示一个表单,您可以在其中输入问题文本,勾选is_free_text复选框以及包含现有选项和加号图标的列表框,以便添加新问题。

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

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

1 个答案:

答案 0 :(得分: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]