定義自定義經理
經常碰巧處理類似 published
欄位的模型。在檢索物件時幾乎總是使用這種欄位,這樣你就會發現自己寫的東西:
my_news = News.objects.filter(published=True)
太多次了。你可以使用自定義管理器來處理這些情況,以便你可以編寫如下內容:
my_news = News.objects.published()
其他開發人員也更好,更容易閱讀。
在 app 目錄中建立一個檔案 managers.py
,並定義一個新的 models.Manager
類:
from django.db import models
class NewsManager(models.Manager):
def published(self, **kwargs):
# the method accepts **kwargs, so that it is possible to filter
# published news
# i.e: News.objects.published(insertion_date__gte=datetime.now)
return self.filter(published=True, **kwargs)
通過重新定義模型類中的 objects
屬性來使用此類:
from django.db import models
# import the created manager
from .managers import NewsManager
class News(models.Model):
""" News model
"""
insertion_date = models.DateTimeField('insertion date', auto_now_add=True)
title = models.CharField('title', max_length=255)
# some other fields here
published = models.BooleanField('published')
# assign the manager class to the objects property
objects = NewsManager()
現在,你可以通過以下方式獲取已釋出的新聞:
my_news = News.objects.published()
你還可以執行更多過濾:
my_news = News.objects.published(title__icontains='meow')