本文介绍 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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。