我正在嘗試創建一個聊天室。這是我的代碼。def make_chatroom(request, user_one, user_two): user_one = user_models.User.objects.get_or_none(pk=user_one) user_two = user_models.User.objects.get_or_none(pk=user_two) if user_one is not None and user_two is not None: try: conversation = models.Conversation.objects.filter( participants=user_one ).filter(participants=user_two) print(conversation) except models.Conversation.DoesNotExist: conversation = models.Conversation.objects.create() conversation.participants.add(user_one, user_two) return redirect(reverse("conversations:detail", kwargs={"pk": conversation.pk}))但“QuerySet”對象沒有屬性“pk”發生錯誤。user_one 存在,user_two 也存在。and print 子句打印<QuerySet [<對話:大師,測試>]>我該如何解決?我的模型.py:class Conversation(core_models.TimeStampedModel): participants = models.ManyToManyField( "users.User", related_name="converstation", blank=True ) def __str__(self): usernames = [] for user in self.participants.all(): usernames.append(user.username) return ", ".join(usernames) def count_messages(self): return self.messages.count() count_messages.short_description = "??? ?" def count_participants(self): return self.participants.count() count_participants.short_description = "??? ?"class Message(core_models.TimeStampedModel): message = models.TextField() user = models.ForeignKey( "users.User", related_name="messages", on_delete=models.CASCADE ) conversation = models.ForeignKey( "Conversation", related_name="messages", on_delete=models.CASCADE ) def __str__(self): return f"{self.user} says: {self.message}"
1 回答

萬千封印
TA貢獻1891條經驗 獲得超3個贊
您的問題在于conversation
最終會成為兩種類型之一,具體取決于是否拋出錯誤。
沒有錯誤:
conversation = models.Conversation.objects.filter( participants=user_one ).filter(participants=user_two)
在這種情況下,對話是一個查詢集,即與您指定的過濾器匹配的所有對象。
錯誤:
conversation = models.Conversation.objects.create()
在這種情況下,對話是一個對話實例,因此它將具有 pk 屬性。
get
我認為您在這里缺少的是在查詢結束時調用。就目前而言,查詢永遠不會拋出錯誤models.Conversation.DoesNotExist
我希望這能解決!
PS 調用get的時候其實有可能會拋出兩個錯誤,你也可以得到一個MultipleObjectsReturned
錯誤。如果你絕對肯定這永遠不會發生,你就不需要處理它,但我想我應該讓你知道
添加回答
舉報
0/150
提交
取消