2011-08-29 84 views
0

我現在有一個的ModelForm Django的設置,但想使窗體無用的領域之一。這裏是我的forms.py:設置的ModelForm整數字段爲不需要的

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 

所以我想出如何重寫我的「年」字段的「必要」的屬性,但是當我去提交表單沒有一年,我得到:

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中創建一個領域不需要?

回答

2

blank=True, null=True添加到您的字段聲明im models.py(並且不要忘記通過遷移或手動在數據庫中反映此更改。

+0

謝謝!我還了解到我的required = False和super()代碼在學習「blank = True」之後是不必要的 –

相關問題