2015-09-23 3 views
1

Предположим, что у меня есть следующие моделиДжанго manytomany поле отсутствует в ModelForm

class Member(models.Model): 
     name = ... 
     qualities = models.ManyToManyField(ProfessionalQuality, related_name='members') 

И следующий вид:

class CommonMemberForm(forms.ModelForm): 
    """This form for gathering common features in both admin and member forms 
    """ 
    class Meta: 
     model = Member 
     fields = '__all__' 

    def __init__(self, *args, **kwargs): 
     super(CommonMemberForm, self).__init__(*args, **kwargs) 
     self.fields['qualities'].validators.append(...) 

Когда я пытаюсь создать экземпляр формы, я получаю KeyError: «качества» не являются в self.fields. Почему это? Этот код работает в admin.

Каков правильный способ обработки таких полей?

+0

как определяется ProtectedManyToManyField? Я имею в виду, что это не поле типа Django –

+0

Это простое расширение ManyToManyField. Сейчас я обновлю вопрос. –

ответ

0

Попробуйте это:

class CommonMemberForm(forms.ModelForm): 
    """This form for gathering common features in both admin and member forms 
    """ 
    class Meta: 
     model = Member 
     fields = '__all__' 
     widgets = { 
      'qualities': forms.CheckboxSelectMultiple() 
     } 

    def __init__(self, *args, **kwargs): 
     super(CommonMemberForm, self).__init__(*args, **kwargs) 
     #self.fields['qualities'].widget... 
+0

Не работает. –

0

Это работает для меня:

class CommonMemberForm(AbstractUser): 
    class Meta: 
     model = Member 
     fields = '__all__' 

    def __init__(self, *args, **kwargs): 
     super(RegularUser, self).__init__(*args, **kwargs) 
     self._meta.get_field('qualities').validators = [validate_qualities]