Django 模型成員

2021-10-02 10:29:19 字數 3716 閱讀 9159

類屬性:

當模型沒有指定管理器的時候,django會為我們自動建立模型管理器。當然,我們也可以自定義管理器。當自定義管理器時,objects就不存在了,django不會為我們自動生成模型管理器了。

模型定義

urlpatterns=

[ url(r'^getanimal/'

,views.getanimal)

]class

animal

(models.model)

: a_name = models.charfield(max_length=32)

# 手動宣告manager物件。

a_manager = models.manager(

)

資料準備

檢視函式

'獲取成功'

)訪問結果

原因是我們手動宣告了manager物件,django不會自動生成了。

呼叫方式發生了改變。

修改檢視函式:

def

getanimal

(request)

: animals = animal.a_manager.

all(

)# 修改為我們宣告的類屬性

'獲取成功'

)

可以成功訪問了!

控制台列印資料:

cat

dogduck

chicken

現在我們在模型定義中新增一列邏輯刪除字段

修改後的模型定義

class

animal

(models.model)

: a_name = models.charfield(max_length=32)

is_delete = models.booleanfield(default=

false

)# 軟刪除字段

更新資料

檢視函式:

查詢邏輯上沒有被刪除的資料。

def

getanimal

(request)

:# 按照正常寫法是這樣的

'獲取成功'

)

但是上述寫法每次我們查詢資料都要寫上filter(is_delete=false),過於麻煩,如果可以每次不寫,預設查詢現有資料該多好啊!沒錯,可以通過重寫方法實現

通過觀察模型類.objects.all()原始碼發現,可以重寫方法get_queryset()

def

all(self)

:# we can't proxy this method through the `queryset` like we do for the

# rest of the `queryset` methods. this is because `queryset.all()`

# works by creating a "copy" of the current queryset and in ****** said

# copy, all the cached `prefetch_related` lookups are lost. see the

# implementation of `relatedmanager.get_queryset()` for a better

# understanding of how this comes into play.

return self.get_queryset(

)

重構上述**

'''

建立自己的manager類

'''class

animalmanager

(models.manager)

:def

get_queryset

(self)

:# 手動新增filter

return

super

(animalmanager, self)

.get_queryset().

filter

(is_delete=

false

)class

animal

(models.model)

: a_name = models.charfield(max_length=32)

is_delete = models.booleanfield(default=

false

)# objects 為了通用,偽裝成系統自帶的objects

objects = animalmanager(

)

def

getanimal

(request)

:# 更改後的寫法,all()

'獲取成功'

)

cat

duck

chicken

Django 教程 Django 模型

乙個django模組是內建的功能,django使用建立表,他們的田地,和各種約束。簡而言之,django models是與django一起使用的sql資料庫。sql 結構化查詢語言 很複雜,涉及許多不同的查詢,用於建立,刪除,更新或與資料庫有關的任何其他內容。django模型簡化了任務並將表組織到模...

Django 模型層 模型

django內建模型方法 乙個模型包含了資料的字段和操作方法,每個模型對映為一張資料庫中的表 person models.py from django.db import models class person models.model first name models.charfield max...

Django模型應用

django模型應用 在web 應用中,主觀邏輯經常牽涉到與資料庫的互動。資料庫驅動 在後台連線資料庫伺服器,從中取出一些資料,然後在 web 頁面用漂亮的格式展示這些資料。這個 也可能會向訪問者提供修改資料庫資料的方法。在django中同樣提供了資料庫的互動功能,就是我們所說的mtv中的 m or...