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瞭解詳情。

相關問題