2017-11-14 9 views
1

로그인 정보에 auth.User 모델을 사용하고 모든 사용자 프로필 데이터에 대해 사용자 정의 UserProfile 모델을 사용하고 있습니다.Python - auth.User 모델을 OneToOneField로 사용하는 장고 쿼리

auth.User.username은 임의의 문자열입니다. 이고 UserProfile.user는 동일한 문자열입니다. 데이터베이스 테이블 "사용자 프로필"나는 다음과 같은 오류 얻을 쿼리를 시도 할 때

는 :

ValueError: invalid literal for int() with base 10: '3df69698-c97d-11e7-a924-b0c0905e8512' 

models.py를

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

class UserProfile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    first_name = models.CharField(max_length=256, default=None) 
    last_name = models.CharField(max_length=256, default=None) 
    ... 

    def __str__(self): 
     return str(self.user) 

views.py

from .models import UserProfile 
from django.contrib.auth.models import User 

def get_users(request): 
    data = json.loads(request.body.decode('utf-8')) 
    user_id = escape(data['id']) 

    # error occurs here 
    user_pref = UserProfile.objects.get(user=user_id) 

이 문제는 온다 데이터베이스 쿼리를 시도 할 때 auth.User 객체와 비교하여 문자열을 사용합니다. 이 문제를 어떻게 해결할 수 있을지 모르겠다.

답변

1

는 해당 문자열은 사용자 이름으로되어 있습니까? 그렇다면 당신은 명시 적으로 해당 필드를 쿼리해야합니다

새로운 오류 제공
UserProfile.objects.get(user__username=user_id) 
+0

예, 이제 알았습니다. 우연히 전체 User 객체를 쿼리했습니다 ... – PhilS

1

은 아마이 :

UserProfile.objects.get(user__user_id=user_id) 
+0

: '필드 관련이 유효 조회를 가지고 : – PhilS

+0

user_id' 당신은 옳았지만, 다니엘과 같이 말했다 auth.User 모델의 이름! – PhilS

+0

예, 맞습니다. lol – anmaxvl