2016-06-24 3 views
1

나는 장고를 처음 사용하며 사용자가 "여행"(django-allauth, 페이스 북의 소셜 계정으로 로그인 한 상태)을 게시 할 수있는 앱을 만들고 싶습니다. 여행 모델은 그것을 만든 사용자의 사회적 계정에 묶여 있어야합니다.django allauth 레퍼런스 소셜 계정

여행을 데이터베이스에 저장하는 데 문제가 있습니다.

class Trip(models.Model): 
    driver = models.OneToOneField(allauth.socialaccount.models.SocialAccount) 

및 오류가 발생합니다 : 나는 그래서 아약스 POST 요청을 사용하고 자바 스크립트로 입력 된 데이터를 수정 했어, 내가 <p class="social-id">{{ user.socialaccount_set.all.0.uid }}</p>

내 모델과 사용자의 사회적 ID를 잡아입니다 그 말 : Cannot assign "'10206730564687878'": "Trip.driver" must be a "SocialAccount" instance. 모델 드라이버 필드 참조를 만드는 시도했는데 allauth.socialaccount.models.SocialAccount.uid하지만 그 중 하나를 작동하지 않았다.

답변

1

OneToOneField을 사용 중입니다. 모든 사용자가 한 번만 여행을 올릴 수 있습니까? 둘 이상을 게시 할 수있게하려면 대신 ForeignKey()을 사용해야합니다.

User 인스턴스 대신 SocialAccount 인스턴스에 연결하는 이유가 있습니까? 당신이 OneToOneField 필드에 str (텍스트 문자열)을 할당하려고 때문에, 당신은 오류가 발생하는 이유는 지금

class Trip(models.Model): 
    driver = models.ForeignKey(User, models.CASCADE, related_name='trips') 

을 사용합니다. 그러나 해당 필드는 SocialAccount의 인스턴스를 기대합니다.

soc_acc = SocialAccount.objects.get(user=request.user) 
trip.driver = soc_acc 
trip.save() 

SocialAccount을 줄 것이다 :

하는 대신 trip.driver = "10206730564687878"을하고, 그것은 문제를 해결하려면, 당신은 (현재 사용자에 대한 예를 들어) SocialAccount의 인스턴스를 가져오고 다음 드라이버에 그를 지정해야합니다 예 : trip.driver.


그리고 또 다른 한가지 : 그것은 자신을 추가 로그인 한 사용자의 경우, 형태에 어떤 SocialAccount ID를 보낼 필요가 없습니다. 오히려, 로그인 한 사용자의 request.user 개체에서 가져 오십시오.

+0

감사합니다. 예, OneToOne 필드는 의도적 인 것입니다. 사용자가 한 번만 여행을 올릴 수 있어야합니다. – TheFlyingProgrammer

관련 문제