高階型號
模型可以提供比僅有關物件的資料更多的資訊。讓我們看一個例子並將其分解為對它有用的內容:
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.pk
在 get_absolute_url
方法中的使用。pk
field 是模型主鍵的別名。此外,如果缺少主鍵,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_name
和 verbose_name_plural
。預設情況下,它們是從模型的名稱生成的,應該沒問題。但是複數形式是天真的,只是簡單地將’s’附加到單數形式,所以你可能想要在某些情況下明確地設定它。