2013-08-18 3 views
0

Я пытаюсь создать форму обновления от User.profile. Но когда я загрузить URL я получаю сообщение об ошибке:DateField не может быть NULL

IntegrityError at /accounts/profile/ 
userprofile_userprofile.dob may not be NULL 

Даже если я дать «DOB» как null=True, я получаю ту же ошибку. Но от администратора я могу добавить UserProfiles. Где я поступаю неправильно? Пожалуйста помоги.

models.py:

from django.db import models 
from django.contrib.auth.models import User 
from time import time 


def get_upload_file_name(instance, filename): 
    return "uploaded_files/profile/%s_%s" %(str(time()).replace('.','_'), filename) 

class UserProfile(models.Model): 

    GENDER = (
     ("M", "Male"), 
     ("F", "Female"), 
     ("O", "Other"), 
     ) 

    RELATIONSHIP = (
     ("S", "Single"), 
     ("M", "Married"), 
     ("D", "Divorced"), 
     ) 

    user = models.OneToOneField(User) 
    image = models.ImageField(upload_to=get_upload_file_name) 
    gender = models.CharField(max_length=1, choices=GENDER) 
    dob = models.DateField('date of birth', blank=True, null=True) 
    about = models.TextField() 
    occupation = models.CharField(max_length=30) 
    state = models.CharField(max_length=20) 
    t_address = models.CharField(max_length=30) 
    p_address = models.CharField(max_length=30) 
    relationship = models.CharField(max_length=1, choices=RELATIONSHIP) 

User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0]) 

forms.py:

from django import forms 
from models import UserProfile 

class UserProfileForm(forms.ModelForm): 

    class Meta: 
     model = UserProfile 
     fields = ('image', 'gender', 'dob', 'about', 'state', 't_address', 'p_address', 'relationship') 
+4

вы добавить 'нуль = True, пробел = true' ограничения _после_ работает SyncDB? – karthikr

ответ

2

Вы, вероятно, уже запустить SyncDB до внесения изменений (см комментарий karthikr в). Вы можете либо удалить таблицу и повторно запустите SyncDB или вы можете редактировать таблицы с помощью SQL:

ALTER TABLE user_profile ALTER COLUMN dob DROP NOT NULL; 
+0

Yup! Так было. Благодаря! – Robin

1

Я не думаю, что вы можете обновить существующие таблицы с syncdb

Для того, чтобы это работало необходимо либо вручную изменить базу данных с помощью SQL или любой другой графический интерфейс вы имеете в наличии или вы можете удалить таблицу (ы), которые вы хотите изменить, обновить ваш models.py с null=True/blank=True, а затем запустить syncdb.