2014-09-02 3 views
0

Я пытаюсь создать условное поле, используя django. «Утвержденный» - это флажок, а «Дата_определения» - поле даты. «Member» - это класс, в котором определяется «чистый» метод.Условное поле/проверка формы с использованием Django

Я хочу, чтобы поле даты стало обязательным полем после проверки утвержденного поля. Я получаю ошибку, используя приведенный ниже код является объектом «NoneType» не имеет атрибута «получить»

Просьба также помочь мне подтвердить, где этот код должен быть помещен. У меня это на моей странице моделей. Всякий раз, когда я помещаю его на страницу своих форм, он не распознает поля.

approved = models.BooleanField() 
date_of_approval = models.DateField(blank=True, null=True,) 

def clean(self): 
    cleaned_data = super(Member, self).clean() 
    approved = cleaned_data.get("approved") 
    date_of_approval = cleaned_data.get("date_of_approval ") 

    if approved and date_of_approval : 

     if approved and not date_of_approval : 
      raise forms.ValidationError("Invaid input") 
    return self.cleaned_data 
+0

Не на 100% уверен, что это дубликат, но он кажется уместным: http://stackoverflow.com/questions/2306800/django-form-validation-making-required-conditional?rq=1. –

+0

как @Peter сказал, эта валидация должна быть в формах. – FrEaKmAn

ответ

0

cleaned_data используется в проверке формы, не модель проверки. Чтобы получить очищенное значение поля во время проверки модели, просто сослаться self:

from django.core.exceptions import ValidationError 

...

class Member(models.Model): 

    # field definitions as above 

    def clean(self): 
     if self.approved and not self.date_of_approval: 
      raise ValidationError("Approved members must have a date of approval") 

Или исправить форму, так что он находит поля в вопросе, но там не хватает информации в ваш вопрос, чтобы узнать, почему у вас проблемы.

+0

Спасибо @peter за ваш ответ. Правда, я даже не знаю, почему в моей форме возникают проблемы с распознаванием полей. Знаете ли вы, почему формы не будут распознавать поля? – k19Uch

+0

Сработало сейчас. Я должен был включить код в другой класс, так как он не работал бы, когда бы я не поместил его в собственный класс. – k19Uch

+0

С одной стороны, это не волшебство - если ваша форма не работала, было что-то не так с тем, как вы ее объявили. С другой стороны, я не собираюсь сидеть здесь и угадывать, что из практически бесконечного числа возможных неправильных вещей, которые могли быть без просмотра кода. –

Смежные вопросы