2016-04-14 10 views
0

UserProfileモデルでユーザーモデルを拡張したいとします。このUserProfileモデルには、ForeignKeyフィールドが含まれています。フォームでは、このフォームフィールドを事前に設定するためにModelChoiceFieldを使用したいと考えています。ForeignKeyフィールドを使用してフォームデータを保存する

私がフォームを送信するたびに、私は任意の助けをいただければ幸いです

ValueError at /accounts/register/ 
Cannot assign "'13'": "UserProfile.course" must be a "Course" instance. 

を入手!

マイコード:

models.py

class Course(models.Model): 
    course_accid = models.CharField(max_length=10) 

    def __str__(self): 
     return self.course_accid 


class UserProfile(models.Model): 
    # This line is required. Links UserProfile to a User model instance. 
    user = models.OneToOneField(User) 

    website = models.URLField(blank=True) 
    picture = models.ImageField(upload_to='profile_images', blank=True) 
    course = models.ForeignKey(Course) 

    def __unicode__(self): 
     return self.user.username 



def user_registered_callback(sender, user, request, **kwargs): 
      profile = UserProfile(user = user) 
      profile.website = request.POST["website"] 
      profile.course = Course.objects.get(pk=request.POST["course"]), 
      profile.save() 

forms.py

class RegistrationForm(RegistrationForm): 
    course = forms.ModelChoiceField(queryset=Course.objects.all()) 
    website = forms.URLField() 
+0

ユーザーを登録しようとしているビューも表示できますか?あなたはフォームの検証をどのように扱いますか?また、 'class RegistrationForm(RegistrationForm):'は正しく見えません。 – ozgur

+0

私はそれを処理するためにdjango-registrationを使用するので、それを処理するためのビューメソッドまたはクラスはありません。 RegistrationForm(RegistrationForm)は私が今気づいていない不運な名前の選択かもしれません。私はフォーム・レンダラーのカスタムUserProfileフィールドを自分自身で追加してdjango登録からRegistrationFormを修正します。私は別のものを選ぶべきだった。 – kftb

答えて

0

ので、発生しています問題はcourseニーズがでcourseインスタンスに設定することです前にステップforms.pyで、それがModelChoiceFieldになる前になぜあなたがquerysetでやっているようにそれを照会するのは、実際のオブジェクトではなく一致する文字列を検索するだけなのです。 次の2つのステップに分割している場合、

class = [some_method_for_getting_a_class_object] 
UserProfile.class = class 

はその後、それはそのエラーを取り除く必要があります。

+0

ありがとうございます!なぜ私はそれが働いていないの要点を得ると思うが、私はそれを行動に入れてトラブルがあります。 あなたは私が私のforms.pyを変更する必要があります意味するか:これは思えませんので もちろん= Course.objects.all() コース= forms.ModelChoiceField(もちろん) ' : 'クラスRegistrationForm(RegistrationForm)働く – kftb

+0

@kftb同じエラーが発生しているのですか、別のエラーが発生していますか? –

+0

同じエラーメッセージです。 – kftb

関連する問題