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

이렇게하는 한 가지 방법은 기본 양식보다는 인라인 쪽에서 액세스하는 것입니다.

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에서보세요 :

는 같은 것을 ChoiceFormModelForm에서 상속 작성하고 당신과 함께 clean() 방법을 대체합니다.