我想對我的私人用戶到用戶聊天,我發現了buyer
的用戶名與模型(User
)和的seller
過濾用戶與另一個模型的用戶名(Profile
)。無法查詢「用戶」:必須是「模式」例如
的問題是,我不明白我怎麼能解決這個問題,爲什麼會出現:
ValueError: Cannot query "user_39": Must be "Profile" instance.
在我的觀點:
uc = userComment.objects.all().first()
users = userComment.objects.filter(Q(buyer=uc.buyer) | Q(seller=uc.seller)) #error occurs with this line
pdb.set_trace()
(Pdb) uc.seller
<Profile: user_39>
(Pdb) uc.buyer
<User: user_4>
這是我的兩個模型。
class Profile(models.Model):
name = models.CharField(max_length=120)
user = models.OneToOneField(User, null=True, blank=True)
class userComment(models.Model):
buyer = models.ForeignKey(User, related_name="buyer", null=True)
seller = models.ForeignKey(Profile, related_name="seller", null=True)
sent_at = models.DateTimeField(auto_now_add=True)
comment = models.TextField(max_length=255, null=True)
在我的模型,我不想改變userComment.seller
到ForeignKey(User, ...)
我怎樣才能解決這個問題?
的要求的完整代碼:
views.py
def addComment(request, gig_id):
gig = Gig.objects.get(id=gig_id)
uc = userComment.objects.all().first()
users = userComment.objects.filter(Q(Q(buyer=uc.buyer) & Q(seller=uc.seller)) | Q(Q(buyer=uc.seller) & Q(seller=uc.buyer))).order_by('sent_at')
if request.method == 'POST':
form = userCommentForm(request.POST, request.FILES)
if form.is_valid():
form.save(buyer=request.user)
return HttpResponseRedirect('../' + str(gig.id))
...
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:
sl = Profile.objects.get(user=seller) #Connection made here.
msg = userComment(buyer=buyer, seller=sl, comment=comment,)
...
...
PDB調試
(Pdb) uc = userComment.objects.all().first()
(Pdb) print('Seller class: %s' % uc.seller.__class__.__name__)
Seller class: Profile
(Pdb) users = userComment.objects.filter(buyer_id=uc.buyer_id)
(Pdb) print(users.count())
3
(Pdb) users = userComment.objects.filter(seller_id=uc.seller_id)
(Pdb) print(users.count())
4
(Pdb) users = userComment.objects.filter(Q(seller_id=uc.seller_id) | Q(buyer_id=uc.buyer_id))
(Pdb) print(users.count())
4
(Pdb) users = userComment.objects.filter(buyer=uc.buyer)
(Pdb) print(users.count())
3
(Pdb) users = userComment.objects.filter(seller=uc.seller)
是不是有另一種方式,以便不使用'ForeignKey(User,...)'?因爲我通過「Profile」模型傳遞其他數據 – Lindow
我編輯了我的答案,看看解釋是否有意義。 –
是的,最後一個是我現在擁有的那個,抱歉在帖子中犯了一個錯誤。但正如我所說的,我必須保留「Profile」作爲ForeignKey,因爲我從那裏得到了一些不在「User」中的數據。 – Lindow