Skip to main content
 首页 » 编程设计

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

2025年05月04日30jirigala

这是一个 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 管理,我想我看到这完全按照我在这里尝试表达的方式完成,但不记得在哪里。

请您参考如下方法:

据我了解你的问题,你应该使用 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]