類屬性:
當模型沒有指定管理器的時候,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...