2016-06-24 9 views
1

私はDjangoを初めて使いました。ユーザーが「旅行」(django-allauth、Facebookのソーシャルアカウントでログインしている)を投稿できるアプリを構築しようとしています。トリップモデルを作成したユーザーのソーシャルアカウントに結びつけることができます。django allauthリファレンスソーシャルアカウント

私はデータベースへの旅行を保存する際に問題があります。

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

と私はエラーを取得する:私は、私はAjaxのPOSTリクエストを使用していますJavaScriptで入力されたデータを修正しなければならなかった、と私は<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を使用しています。すべてのユーザーは1回の旅行を投稿できますか?複数の投稿を投稿できるようにするには、代わりにForeignKey()を使用してください。

また、メインのUserインスタンスではなく、SocialAccountインスタンスにリンクする理由がありますか?あなたはOneToOneFieldフィールドにstr(テキスト文字列)を割り当てるしようとしているので、私は、あなたがエラーを取得している理由は、今

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

を使用します。しかし、そのフィールドはSocialAccountのインスタンスを想定しています。代わりにtrip.driver = "10206730564687878"を行うので、あなたは(現在のユーザーのために、たとえば)SocialAccountのインスタンスを取得して、ドライバーにそれを割り当てる必要があるだろう、それを修正する

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

SocialAccountを与えるだろう例:trip.driver


そして別の事:それは自分自身を追加したユーザでログインしている場合は、フォームに任意のSocialAccount IDを送信する必要はありません。むしろ、ログインしたユーザーのrequest.userオブジェクトから取得してください。

+0

ありがとうございます!はい、OneToOneフィールドは意図的なものですが、私は1回の旅行を投稿できるユーザーだけです – TheFlyingProgrammer

関連する問題