2017-01-09 29 views
1

我正在創建一個用戶可以發佈其內容的網站,每個內容都重定向到一個私人用戶,以根據內容ID進行用戶聊天。無法指定必須是實例的形式保存

我這樣做,所以我可以檢索私人聊天的內容信息。

的問題是,當用戶提交表單張貼comment我得到這個錯誤:

無法分配「<用戶:my_user>」:「userComment.seller」必須是一個「檔案」實例。

在我看來,我節省了連接用戶爲buyer和誰將會收到的評論爲seller用戶。

我該如何解決這個錯誤?我在下面的代碼中做了什麼錯誤?

這裏是models.py

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 

回溯:

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

檢查'seller'的類型。並將其轉換爲'Profile'類型。 – Prajwal

回答

2

userComment模型費爾德seller作爲外鍵名爲Profile另一種模式。但通過msg = userComment(buyer=buyer, seller=seller, comment=comment,)的買方實例類型爲User,而非Profile類型。

要麼修改 seller = models.ForeignKey(Profile, related_name="seller", null=True)seller = models.ForeignKey(User, related_name="seller", null=True) 或 檢索和傳遞Profile實例。

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

你CommaSeparatedUserField用戶領域似乎是,你還沒有跟我們分享的自定義字段。不過很容易看出,你的清單數據實際上是一個賣家名稱列表,而不是Seller實例。如果在另一方面,它包含的ID,你可以這樣做:

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

如果只是名稱

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