本文介紹 django.contrib.sites.managers.CurrentSiteManager
的用法。
聲明
class managers.CurrentSiteManager
如果
在您的應用程序中發揮關鍵作用,請考慮在您的模型中使用有用的Site
。它是一個模型管理器,可以自動過濾其查詢以僅包含與當前 CurrentSiteManager
關聯的對象。Site
通過將
明確添加到模型中來使用它。例如:CurrentSiteManager
from django.contrib.sites.models import Site
from django.contrib.sites.managers import CurrentSiteManager
from django.db import models
class Photo(models.Model):
photo = models.FileField(upload_to='photos')
photographer_name = models.CharField(max_length=100)
pub_date = models.DateField()
site = models.ForeignKey(Site, on_delete=models.CASCADE)
objects = models.Manager()
on_site = CurrentSiteManager()
使用此模型,Photo.objects.all()
將返回數據庫中的所有Photo
對象,但根據
設置,SITE_ID
Photo.on_site.all()
將僅返回與當前站點關聯的Photo
對象。
換句話說,這兩個語句是等價的:
Photo.objects.filter(site=settings.SITE_ID)
Photo.on_site.all()
怎麽知道 CurrentSiteManager
Photo
的哪個字段是
?默認情況下,Site
查找名為 CurrentSiteManager
site
的
或名為 ForeignKey
sites
的
進行過濾。如果您使用除 ManyToManyField
site
或 sites
以外的名稱的字段來識別您的對象與哪些
對象相關,那麽您需要將自定義字段名稱作為參數顯式傳遞給模型上的 Site
。以下模型有一個名為 CurrentSiteManager
publish_on
的字段,演示了這一點:
from django.contrib.sites.models import Site
from django.contrib.sites.managers import CurrentSiteManager
from django.db import models
class Photo(models.Model):
photo = models.FileField(upload_to='photos')
photographer_name = models.CharField(max_length=100)
pub_date = models.DateField()
publish_on = models.ForeignKey(Site, on_delete=models.CASCADE)
objects = models.Manager()
on_site = CurrentSiteManager('publish_on')
如果您嘗試使用
並傳遞一個不存在的字段名稱,Django 將引發 CurrentSiteManager
ValueError
。
最後,請注意,即使您使用
,您也可能希望在模型上保留一個正常的(非特定於站點的)CurrentSiteManager
Manager
。如管理器文檔中所述,如果您手動定義管理器,那麽 Django 不會為您創建自動的objects = models.Manager()
管理器。另請注意,Django 的某些部分 - 即 Django 管理站點和通用視圖 - 使用模型中定義的 first
的任何管理器,因此如果您希望管理站點可以訪問所有對象(不僅僅是 site-specific ),在定義
之前,將 CurrentSiteManager
objects = models.Manager()
放入模型中。
相關用法
- Python Sympy Curve.translate()用法及代碼示例
- Python Django CursorWrapper.callproc用法及代碼示例
- Python Django CustomUserManager.create_user用法及代碼示例
- Python Django CustomUserManager.create_superuser用法及代碼示例
- Python Tableau CSVRequestOptions用法及代碼示例
- Python Django ContentTypeManager用法及代碼示例
- Python Calendar itermonthdays2()用法及代碼示例
- Python Condition release()用法及代碼示例
- Python Collections.UserString用法及代碼示例
- Python Calendar monthdatescalendar()用法及代碼示例
- Python Condition notify()用法及代碼示例
- Python CSV轉JSON用法及代碼示例
- Python Django ContextMixin.get_context_data用法及代碼示例
- Python Condition wait()用法及代碼示例
- Python Django Coalesce用法及代碼示例
- Python Calendar itermonthdates()用法及代碼示例
- Python Calendar iterweekdays()用法及代碼示例
- Python Django Client用法及代碼示例
- Python Django Cot用法及代碼示例
- Python Calendar monthdayscalendar()用法及代碼示例
- Python Django Client.get用法及代碼示例
- Python Calendar itermonthdays3()用法及代碼示例
- Python Django Ceil用法及代碼示例
- Python Collections.UserDict用法及代碼示例
- Python Celsius轉Fahrenheit用法及代碼示例
注:本文由純淨天空篩選整理自djangoproject.com大神的英文原創作品 django.contrib.sites.managers.CurrentSiteManager。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。