2012-09-28 3 views
1

내 auth.User 모델에 정보를 추가하기 위해 나는 piece of doc을 따랐습니다. 저는 사용자를 사회로 가정하고 (예를 들어 사용자가 클라이언트라고 가정)이 사회에서 일하고 싶습니다. 그래서 여기 내 코드입니다 :"사용자 추가 정보"개체를 올바르게 만드는 방법./IntegrityError "Column * something *은 null이 될 수 없습니다."

사회/models.py :

from django.db import models 
from django.contrib.auth.models import User 
from django.db.models.signals import post_save 


class UserProfile(models.Model): 
    """ 
    Stores the user informations except 
    login basic informations. 
    """ 
    user = models.OneToOneField(User) 
    firstname = models.CharField(max_length=128) 
    lastname = models.CharField(max_length=128) 
    society = models.ForeignKey('Society') 
    job = models.ForeignKey('UserJob') 


class Society(models.Model): 
    """ 
    Stores the informations about the societies. 
    """ 
    name = models.CharField(max_length=128) 


class UserJob(models.Model): 
    """ 
    Stores the user job category in the society. 
    """ 
    name = models.CharField(max_length=64) 


def create_user_profile(sender, instance, created, **kwargs): 
    """ 
    Uses the post_save signal to link the User saving to 
    the UserProfile saving. 
    """ 
    if created: 
     UserProfile.objects.create(user=instance) 


#the instruction needed to use the post_save signal 
post_save.connect(create_user_profile, sender=User) 

사회/admin.py : 내 관리 -의 필드를하기 위해 UserProfileInline을 추가

from django.contrib import admin 
from django.contrib.auth.models import User 
from django.contrib.auth.admin import UserAdmin 
from societies.models import UserProfile, Society, UserJob 


class UserProfileInline(admin.StackedInline): 
    """ 
    Defines an inline admin descriptor for UserProfile model 
    which acts a bit like a singleton 
    """ 
    model = UserProfile 
    can_delete = False 
    verbose_name_plural = 'profile' 


class UserAdmin(UserAdmin): 
    """ 
    Defines a new User admin. 
    """ 
    inlines = (UserProfileInline,) 

admin.site.unregister(User) 
admin.site.register(User, UserAdmin) 

admin.site.register(Society) 
admin.site.register(UserJob) 

사이트 사용자 양식.

AUTH_PROFILE_MODULE = 'societies.UserProfile' 

문제는 내가 USERPROFILE 특정 필드를 작성 포함한 관리 현장 내 사용자 양식을 통해 사용자를 만들려고 할 때, 내가 얻을 다음입니다 : 내 settings.py에이 라인을 추가 이 : 나는 '폼에서 사회를 지정한 때문에

/관리/인증/사용자에 IntegrityError/

("null 일 수 없습니다 열이'society_id '"1048,)/

추가 문제가 신호에서 오는 것이 아니라면 자기 자신에게 묻습니다. 내 create_user_profile 함수로 처리. 내가 앞서 언급 한 의사를 고려할 때, 할 일이 더 없다. 그러나, UserProfile.create (...) 호출을 통해 firstname, lastname, society 및 job과 같은 UserProfile 필드를 채우는 방법을 정확하게 설명하지 않아도됩니까? ("user = instance"매개 변수 이외에). 이 경우 매개 변수를 채우는 데 올바른 요소를 얻는 방법을 모르겠습니다. 의사는 "accepted_eula"와 "favorite_animal"에 대해서는 아무 것도 행해지 지 않습니다. 그래서 저는 틀렸어 ... 그렇지 않나요?

답변 해 주셔서 대단히 감사합니다. 제 언어에 대해 사과드립니다.

답변

3

내 실수를 발견했습니다. UserProfile 모델의 사회 및 UserJob 외래 필드에 기본값을 추가해야했습니다. 또 다른 솔루션은 null이 될 수 있음을 지정하는 것입니다.

불편을 끼쳐 드려 죄송합니다.