亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查詢集 Q 過濾器?問得到?如何獲得'pk'

查詢集 Q 過濾器?問得到?如何獲得'pk'

白衣非少年 2023-02-22 17:17:25
我正在嘗試創建一個聊天室。這是我的代碼。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錯誤。如果你絕對肯定這永遠不會發生,你就不需要處理它,但我想我應該讓你知道


查看完整回答
反對 回復 2023-02-22
  • 1 回答
  • 0 關注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號