第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

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

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

白衣非少年 2023-02-22 17:17:25
我正在嘗試創(chuàng)建一個聊天室。這是我的代碼。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”發(fā)生錯誤。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貢獻(xiàn)1891條經(jīng)驗 獲得超3個贊

您的問題在于conversation最終會成為兩種類型之一,具體取決于是否拋出錯誤。

沒有錯誤:

        conversation = models.Conversation.objects.filter(
            participants=user_one
        ).filter(participants=user_two)

在這種情況下,對話是一個查詢集,即與您指定的過濾器匹配的所有對象。

錯誤:

conversation = models.Conversation.objects.create()

在這種情況下,對話是一個對話實例,因此它將具有 pk 屬性。

get我認(rèn)為您在這里缺少的是在查詢結(jié)束時調(diào)用。就目前而言,查詢永遠(yuǎn)不會拋出錯誤models.Conversation.DoesNotExist

我希望這能解決!

PS 調(diào)用get的時候其實有可能會拋出兩個錯誤,你也可以得到一個MultipleObjectsReturned錯誤。如果你絕對肯定這永遠(yuǎn)不會發(fā)生,你就不需要處理它,但我想我應(yīng)該讓你知道


查看完整回答
反對 回復(fù) 2023-02-22
  • 1 回答
  • 0 關(guān)注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號