Установить целочисленное поле ModelForm как необязательное - PullRequest
0 голосов
/ 29 августа 2011

В настоящее время у меня настроена ModelForm в Django, но я бы хотел, чтобы одно из полей формы было необязательным.Вот мой forms.py:

from django.forms import ModelForm
from add_flair.models import User


class UserForm(ModelForm):

    class Meta:
        model = User

    def __init__(self, *args, **kwargs):
        super(UserForm, self).__init__(*args, **kwargs)
        self.fields['year'].required = False

Итак, я выяснил, как переопределить атрибут 'required' моего поля 'year', но когда я иду, чтобы отправить форму без года, я получаю:

Environment:

Request Method: POST
Request URL: http://127.0.0.1:9999/flair/add/

Django Version: 1.3
Python Version: 2.6.6
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'project.add_flair']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/home/coreyf/dev/reddit-calpoly-addflair/project/../project/add_flair/views.py" in add
  14.             save_user(form, confirm_num)
File "/home/coreyf/dev/reddit-calpoly-addflair/project/../project/add_flair/views.py" in save_user
  42.     user.save()
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/db/models/base.py" in save
  460.         self.save_base(using=using, force_insert=force_insert, force_update=force_update)
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/db/models/base.py" in save_base
  543.                         for f in meta.local_fields if not isinstance(f, AutoField)]
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/db/models/fields/subclassing.py" in inner
  28.             return func(*args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/db/models/fields/subclassing.py" in inner
  28.             return func(*args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/db/models/fields/__init__.py" in get_db_prep_save
  276.         return self.get_db_prep_value(value, connection=connection, prepared=False)
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/db/models/fields/subclassing.py" in inner
  53.             return func(*args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/db/models/fields/subclassing.py" in inner
  53.             return func(*args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/db/models/fields/__init__.py" in get_db_prep_value
  271.             value = self.get_prep_value(value)
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/db/models/fields/__init__.py" in get_prep_value
  876.         return int(value)

Exception Type: ValueError at /flair/add/
Exception Value: invalid literal for int() with base 10: ''

Я предполагаю, что int () пытается проанализировать пустое значение и выдает ошибку.Есть ли способ это исправить?Есть ли лучший способ сделать поле из ModelForm ненужным?

1 Ответ

2 голосов
/ 29 августа 2011

Добавьте blank=True, null=True к объявлению поля im models.py (и не забудьте отразить это изменение в БД, путем миграции или вручную).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...