2017-01-09 6 views
1

コンテンツを公開できるサイトを作成しています。各コンテンツはコンテンツIDに応じてプライベートユーザーにチャットするようにリダイレクトされます。フォームの保存時にインスタンスを割り当てることはできません

私はこのようにしているので、プライベートチャットのコンテンツ情報を取得できます。

を割り当てることができません「<ユーザー:my_user>」:「userComment.sellerは、」「プロフィール」でなければなりません

問題は、ユーザーがcommentを投稿するフォームを送信するとき、私はこのエラーを取得するということですインスタンス。私の見解では

、私はsellerとしてコメントを受け取ることになりますbuyerとして接続しているユーザとユーザを保存しています。

このエラーを修正するにはどうすればよいですか?下のコードで何が間違っていますか?

class Profile(models.Model): 
    name = models.CharField(max_length=120) 
    user = models.OneToOneField(User, null=True, blank=True) 

class Gig(models.Model): 
    profile = models.ForeignKey(Profile, null=True) 
    title = models.CharField(max_length=100, unique=True) 

class userComment(models.Model): 
    buyer = models.ForeignKey(User, related_name="buyer", null=True) 
    seller = models.ForeignKey(Profile, related_name="seller", null=True) 
    comment = models.TextField(max_length=255, null=True) 

views.py

def addComment(request, gig_id): 
    gig = Gig.objects.get(id=gig_id) 
    username = gig.profile.user 

    if request.method == 'POST': 
     form = userCommentForm(request.POST, request.FILES) 
     if form.is_valid(): 
      form.save(buyer=request.user) 
      return HttpResponseRedirect('/') 

    else: 
     form = userCommentForm() 
     form.fields['seller'].initial = username 

forms.py

class userCommentForm(forms.Form): 
    seller = CommaSeparatedUserField(label=_(u"seller")) 
    comment = forms.CharField(label=_(u"comment"), widget=forms.Textarea()) 

    def save(self, buyer): 
     sellers = self.cleaned_data['seller'] 
     comment = self.cleaned_data['comment'] 
     message_list = [] 
     for seller in sellers: 
      msg = userComment(buyer=buyer, seller=seller, comment=comment,) 

      if seller == buyer: 
       print('-----------------------------------------------') 
       print('same') 

      if None is not None: 
       msg.parent_msg = None 
       None.save() 
      msg.save() 
      message_list.append(msg) 

     return message_list 

はここmodels.pyです

トレースバック:

File "C:\Python34\projects\tryTen\private_comment\views.py" in addComment 
    31.    form.save(buyer=request.user) 

File "C:\Python34\projects\tryTen\private_comment\forms.py" in save 
    15.    msg = userComment(buyer=buyer, seller=seller, comment=comment,) 
+0

「売り手」のタイプを確認してください。 'Profile'型に変換する方法です。 – Prajwal

答えて

2

かどう

msg = userComment(buyer=buyer, seller_id=seller, comment=comment,) 

をごuserCommentモデルがProfileという名前の別のモデルへの外部キーとしてフェイルドsellerを持っています。しかし、msg = userComment(buyer=buyer, seller=seller, comment=comment,)に渡された買い手のインスタンスはUserタイプであり、タイプはProfileではありません。

seller = models.ForeignKey(User, related_name="seller", null=True)seller = models.ForeignKey(Profile, related_name="seller", null=True)を変更したり、 Profileインスタンスを取得し、パスのどちらか。

p = Profile.objects.get(user=seller) 
msg = userComment(buyer=buyer, seller=p, comment=comment) 
1

あなたCommaSeparatedUserFieldユーザーフィールドは、あなたが私たちと共有していないカスタムフィールドのように見えます。しかし、あなたのcleaned_dataが実際にSellerインスタンスではなく売り手名のリストであることを確認するのは簡単です。一方で、それはIDが含まれている場合は、あなただけで行うことができます:それは名前だけ

sl = Profile.objects.get(name=seller) # adjust this according to your model 
msg = userComment(buyer=buyer, seller_id=sl, comment=comment,) 
関連する問題