1

这是一个简单的多项选择应用程序。Django:如何从父模型表单访问内联字段?

一个问题可以有4个选择。

在管理面板中,当保存新的问题时,我想检查一些空的选项(无字),但我不知道如何访问这4个选项。

如何访问QuestionForm的clean()函数内的选项值?要做到这一点

#model.py 
class Question(models.Model): 
    question = models.CharField(max_length = 250) 

class Choice(models.Model): 
    question = models.ForeignKey(Question) 
    choice = models.CharField(max_length = 250) 

#admin.py 
class ChoiceInline(admin.TabularInline): 
    model = Choice 
    extra = 4 
    can_delete = False 
    max_num = 4 # fix to have 4 choices 


class QuestionForm(forms.ModelForm): 
    class Meta: 
     model = Question 
     fields = '__all__' 

    def clean(self): 
     """ 
     HERE, i want to access the 4 choices model 
     """ 
     return self.cleaned_data 

class QuestionAdmin(admin.ModelAdmin): 
    form = QuestionForm 
    inlines = [ChoiceInline]   


admin.site.register(Question, QuestionAdmin) 
admin.site.register(Choice, ChoiceAdmin) 

回答

0

一种方法是从内联侧访问,而不是主要形式。

创建ChoiceFormModelForm继承,并与你更换clean()方法是这样的:

class ChoiceForm(forms.ModelForm): 
    def clean(self): 
     cleaned_data = super(ChoiceForm, self).clean() 
     for f in self.forms: 
      f.cleaned_data['choice'] # contains the text you want 
      # so you can check if it's empty and raise ValidationError() 
      # if needed 
     return self.cleaned_data 

看一看https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/#overriding-clean-on-a-modelformset了解详情。

相关问题