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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

無(wú)法匹配 django 中 get_user_model 的字段

無(wú)法匹配 django 中 get_user_model 的字段

月關(guān)寶盒 2023-12-11 16:35:45
我正在開(kāi)發(fā)一個(gè)圖書(shū)庫(kù)存項(xiàng)目,用戶可以在其中添加他們的圖書(shū),其他人也可以看到它們。我試圖在主頁(yè)上顯示所有書(shū)籍,但只有所有者才能看到“編輯”和“刪除”選項(xiàng)。其他人將看到“查看詳細(xì)信息”選項(xiàng)。當(dāng)用戶添加新書(shū)時(shí),我使用 Django 的 get_user_model() 功能來(lái)獲取該書(shū)的所有者:...class Book(models.Model):    title =models.CharField(max_length =255)    author =models.CharField(max_length =255)    genre =models.CharField(max_length=255)    date=models.DateTimeField(auto_now_add =True)    owner =models.ForeignKey(get_user_model(),on_delete =models.CASCADE,)...現(xiàn)在,當(dāng)我映射用戶的用戶名和書(shū)的所有者時(shí),它不起作用。這是 HTML 模板的 ID:...{% for book in object_list %}<div class="card">    <span class="font-weight-bold">{{book.title}}</span>     <span class="font-weight-bold">by {{book.author}}</span>    <span class="text-muted">Genre: {{book.genre}}</span>    <span class="text-muted">Owner: {{book.owner}}</span>    <span class="text-muted">User: {{user.username}}</span>    <div class="card-footer text-center text-muted">        {% if user.username == book.owner  %}         <a href ="{% url 'book_edit' book.pk %}">Edit</a> | <a href="{% url 'book_delete' book.pk %}">Delete</a>         {% else %}         <a href="#">Show Details</a>         {% endif %}        </div></div><br />{% endfor %}...我也分別帶來(lái)了用戶名和所有者以進(jìn)行比較。我仍然獲得所有書(shū)籍的展示詳細(xì)信息。對(duì)于調(diào)試,我還嘗試將 'user.username' 和 'book.owner' 等同于 'jitesh2796' 。雖然前者有效,但后者無(wú)效。所以我猜問(wèn)題出在 django 領(lǐng)域的某個(gè)地方。
查看完整描述

2 回答

?
嗶嗶one

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊

你應(yīng)該使用:


{% if request.user == book.owner %}

    …

{% endif %}

但盡管如此,在模板中進(jìn)行過(guò)濾并不是一個(gè)好主意。您應(yīng)該在視圖中進(jìn)行過(guò)濾,以便過(guò)濾可以在數(shù)據(jù)庫(kù)級(jí)別進(jìn)行。例如:


from django.views.generic import ListView

from django.contrib.auth.mixins import LoginRequiredMixin


class BookListView(LoginRequiredMixin, ListView):

    model = Book

    # …


    def get_queryset(self, *args, **kwargs):

        return super().get_queryset(*args, **kwargs).filter(

            owner=self.request.user

        )

注意:文檔建議使用AUTH_USER_MODEL設(shè)置 [Django-doc]而不是 get_user_model()[Django-doc]。這更安全,因?yàn)槿绻矸蒡?yàn)證應(yīng)用程序尚未加載,設(shè)置仍然可以指定模型的名稱。因此最好這樣寫(xiě):


from django.conf import settings


class Book(models.Model):

    # …

    owner = models.ForeignKey(

        settings.AUTH_USER_MODEL,

        on_delete=models.CASCADE

    )


查看完整回答
反對(duì) 回復(fù) 2023-12-11
?
BIG陽(yáng)

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊

您需要更新模板中的條件


{% if user.username == book.owner.username  %}

....

{% endif %}


查看完整回答
反對(duì) 回復(fù) 2023-12-11
  • 2 回答
  • 0 關(guān)注
  • 164 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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