장고 등록 및 신호를 사용하는 데 약간 문제가 있습니다. 기본 설정은 django 1.4.3 설치가 장고 - 남쪽 및 장고 등록 (그리고 db는 SQLite로 가치가 있음)입니다.OneToOne 일부 ID 문제를 일으키는 사용자의 필드
편집 : 질문이 변경되었습니다. 쉘에서 효과가 동일하므로 등록이 원인이 아닙니다 (편집 내용은 이탤릭체로 표시됨).
나는 다음과 같은 방법으로 사용자 모델과 관련이 내 모델의 하나가 :
class MyUserProfile(models.Model):
user = models.OneToOneFiled(User)
#additional fields
내가 남쪽을 사용하여베이스를 초기화. 내가에 있어야 SQL을 확인 sqlall
조금을, 나는 명확하게 볼 수 있습니다 : 그 후
CREATE TABLE "myApp_myuserprofile" (
"id" integer NOT NULL PRIMARY KEY
"user_id" integer NOT NULL UNIQUE REFERENCES "auth_user" ("id"),
#other fields
)
를, I는 사용자가 계정을 활성화하면 데이터를 초기화하고 싶었다. 그래서 models.py에서 나는 거기에 생각하지만, 모든 것이 괜찮아 보인다
from django.dispatch import receiver
from registration.signals import user_activated
#Models....
@receiver(user_activated)
def createMyProfile(sender, **kwargs):
currentUser = kwargs['user']
profile = Profile(user = currentUser, #other fields default value)
profile.save()
#And now the reverse relation:
currentUser.myuserprofile = profile
currentUser.save()
을 넣어 나는 (사용자와 프로파일 모두) ID를 인쇄하고 있다면 앞뒤로 두 사이에 여행하는 경우 , 나는 틀린 것처럼 보이는 것을 본다.
코드의이 부분을 비활성화하고 쉘을 사용하여 같은 종류의 초기화를 수행하면 동일한 결과가 나타납니다.
하지만 그 후에는 모든 것이 틀립니다. 내가 쉘을 열고 관련 문제를 가져 오는 경우 , 나는 모든 X 값
MyUserProfile.objects.get(pk=X)
#DoesNotExist Exception
User.objects.get(pk=X).myuserprofile.pk
1
MyUserProfile.objects.all()[X].pk
1
에 대해 다음 한없이 좀 이상한 것 같은데?
는 그리고 지금은 SQL 쉘
select id from myApp_myuserprofile;
1
1
1
1
...
에 가면 그래서 사방에 같은 값으로 가득 차 열 수 있습니다. 어느 쪽이 당연한 말인가? 당황 스럽다. (모두가 같은 이드를 가진 프로필을 가지고 있기 때문에 문제를 일으킨다.)
문제의 원인이 될 수있는 아이디어와 해결 방법은 무엇입니까?
P.S : 관련 관계의 외래 키가 정확하고 고유성이 유지된다는 점에 유의하십시오.