2015-06-08 8 views
0

В моей форме django есть ошибки при загрузке начальной страницы, прежде чем форма даже получит возможность отправить.ошибки формы django перед отправкой

Мое мнение:

def example_function(request): 
    if request.method == 'POST': 
     # the request is GET 
    else: 
     form = MyForm(user=request.user) 
     import pdb;pdb.set_trace() 

return render_to_response('templates/example.html', locals(), context_instance=RequestContext(request),) 

Где у меня есть мой pdb импортирован в консоли я вижу, что моя форма уже есть ошибки. Вывод form.errors в моей консоли - это все поля в модели, для которых установлено значение не null.

(Pdb) form.errors 
{'example_field_1': [u'This field is required.'], 'example_field_2': [u'This field is required.']} 

The form пока не представить, но я все еще получаю ошибки. Может кто-нибудь объяснить?

Я использую django 1.4.

Моя форма:

class MyForm(forms.ModelForm): 
    captcha = ReCaptchaField() 
    _readonly_template = form.TextInput(attrs={'readonly':'readonly'}) 
    first_name = forms.CharField(widget = _readonly_tempalte) 

    def __init__(self, data=None, *args, **kwargs): 
     data = data or {} 
     if 'user' in kwargs: 
      user = kwargs['user'] 
      del kwargs['user'] 
      data.update({ 
       'first_name' : user.first_name, 
      }) 

     super(MyForm, self).__init__(data, *args, **kwargs) 

    class Meta: 
     model = MyModel 

Моя модель:

class MyModel(models.Model): 
    first_name = models.CharField(max_length=255) 
    example_field_1 = models.CharField(max_length=255) 
    example_field_2 = models.CharField(max_length=255) 
+1

Пожалуйста, ваши код формы –

+0

@IainShelvington Пожалуйста, смотрите мой выбор. – smilebomb

+0

Но вы явно помещаете 'user' в параметр' data' внутри '__init__', поэтому, естественно, форма теперь привязана. Вам нужно это сделать? Вам нужно передать пользователя на GET? –

ответ

0

вам не нужно делать что-то подобное делать это

form = NameForm(request.POST) 

Вместо того, чтобы пытаться использовать пользовательский объект для заполнить форму? Будет ли у пользователя объект example_field_1?

https://docs.djangoproject.com/en/1.8/topics/forms/

+0

Пожалуйста, посмотрите мой код формы в моем редактировании. – smilebomb

+0

, но вы не указываете значения для example_field_1 и не отмечаете его как необязательный, чтобы ошибки были действительными. –

+0

Да. Но, разве это не было бы проблемой после подачи формы, а не раньше? Если требуется поле и нет хорошего значения по умолчанию, это похоже на плохую конструкцию, чтобы автоматически получить ошибку при начальной загрузке страницы. – smilebomb

-1

Это нормальное поведение.

Некоторые свойства полей проверяются на стороне клиента. Сообщения об ошибках относятся к форме, являются частью html, но пока не отображаются. Он сохраняет запрос клиент-сервер.

0

Я не уверен, как структурирована поле пользователя, но имейте в виду, что если вы хотите, чтобы имя пользователя, вы можете захотеть изменить что от request.user к request.user.username.

Надеюсь, что вы решили проблему, но в случае, если вы этого не сделали, у меня была аналогичная проблема, которую я смог решить, используя «или None» при настройке формы после проверки, является ли она POST (или GET) запрос.

В вашем случае это выглядит как это может быть немного другой вопрос, но я подумал, что этот фрагмент может исправить вещи:

if request.method == "POST": 
    form = MyForm(request.POST or None) 
    # .. do stuff.... 
else:  #.....this is a GET 
    data = {'user': request.user.username} #note this is changed to username 
    form = MyForm(data) 
Смежные вопросы