2014-02-07 2 views
0

У меня есть модель с некоторыми полями и пользователя как ForeignKeyДжанго modelforms и поля

class Customer(models.Model): 
    #fields 
    salesman = models.ForeignKey(User, blank=True, null=True) 

и типовую форму

class CustomerForm(ModelForm): 

    class Meta: 
     model = Customer 

Я хочу, чтобы моя форма для проверки, если продавец также введен, но а не на уровне базы данных. Если я добавлю поле продавца

class CustomerForm(ModelForm): 
    salesman = forms.ModelChoiceField(required=True, queryset=User.objects.all(), widget=Select(attrs{"class":"form-control"}) 

    class Meta: 
     model = Customer 

будет ли это полемизировать модельное поле? Должен ли я переопределить метод сохранения, чтобы сохранить значение вновь созданного поля для моделей по умолчанию? Или форма django видит одно и то же имя поля и использует его правильно?

+0

Да, она перекрывает его. – arocks

+0

Так что я должен переопределить метод сохранения тоже? – Apostolos

+1

Прочтите поле «Примечание» в этом разделе https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-default-fields – arocks

ответ

0

Вы можете переопределить если clean метод формы:

class CustomerForm(ModelForm): 
    class Meta: 
     model = Customer 

    def clean(self, *args, **kwargs): 
     cleaned_data = super(CustomerForm, self).clean(*args, **kwargs) 
     salesman = cleaned_data.get('salesman') 
     if salesman: 
      # do something 
     else: 
      # you can rise form error if need 
      msg = u"Salesman is required" 
      self._errors["salesman"] = self.error_class([msg]) 
Смежные вопросы