高階型號

模型可以提供比僅有關物件的資料更多的資訊。讓我們看一個例子並將其分解為對它有用的內容:

from django.db import models
from django.urls import reverse
from django.utils.encoding import python_2_unicode_compatible

@python_2_unicode_compatible
class Book(models.Model):
    slug = models.SlugField()
    title = models.CharField(max_length=128)
    publish_date = models.DateField()

    def get_absolute_url(self):
        return reverse('library:book', kwargs={'pk':self.pk})

    def __str__(self):
        return self.title

    class Meta:
        ordering = ['publish_date', 'title']

自動主鍵

你可能會注意到 self.pkget_absolute_url 方法中的使用。pkfield 是模型主鍵的別名。此外,如果缺少主鍵,django 將自動新增主鍵。這是一個不用擔心的事情,讓你可以為任何模型設定外來鍵並輕鬆獲取它們。

絕對的網址

定義的第一個函式是 get_absolute_url。這樣,如果你有一本書,你可以獲得一個連結,而無需擺弄網址標記,解析,屬性等。只需撥打 book.get_absolute_url 即可獲得正確的連結。作為獎勵,你在 django 管理員中的物件將獲得一個網站檢視按鈕。

字串表示

使用 __str__ 方法可以在需要顯示時使用該物件。例如,使用上一種方法,在模板中新增書籍連結就像 <a href="{{ book.get_absolute_url }}">{{ book }}</a> 一樣簡單。開門見山。例如,對於外來鍵,此方法還控制管理下拉選單中顯示的內容。

類裝飾器允許你在 python 2 上為 __str____unicode__ 定義一次方法,同時在 python 3 上沒有問題。如果你希望你的應用程式在兩個版本上執行,那就是要走的路。

S field 場

slug 欄位類似於 char 欄位但接受較少的符號。預設情況下,只有字母,數字,下劃線或連字元。如果你想在 url 中使用漂亮的表示來標識物件,這很有用。

Meta 類

Meta 類讓我們在整個專案集合中定義了更多的資訊。此處僅設定預設排序。例如,它對 ListView 物件很有用。它需要一個理想的用於排序的欄位列表。在這裡,如果日期相同,書籍將首先按出版日期排序,然後按標題排序。

其他常客屬性是 verbose_nameverbose_name_plural。預設情況下,它們是從模型的名稱生成的,應該沒問題。但是複數形式是天真的,只是簡單地將’s’附加到單數形式,所以你可能想要在某些情況下明確地設定它。