处理数据库对象的公共可用性的自定义管理器。
django-publicmanager的Python项目详细描述
Django公共经理
Django PublicManager应用程序提供了一个自定义的QuerySet类和 处理数据库对象的公共可用性的管理器。班级 提供按布尔值is_public和日期筛选的public方法 基于pub_date字段。
安装
安装django publicmanager包只需要一个简单的sudo easy_install dango-publicmanager。
使用量
该包仅包含两个管理器。经理GenericPublicManager 工作方式与django的默认管理器完全相同,只是它提供了 public()只返回公共可用对象的方法。运动员 管理器PublicOnlyManager默认情况下返回公共对象,而不返回 调用任何额外的方法。
很明显,您至少需要一个模型来使用其中的一个或两个 经理。经理将使用以下一个或多个字段来 确定对象是否为公共对象。
- is_public:这必须是models.BooleanField,如果设置为 True,它将被视为公共的。
- pub_date必须是models.DateTimeField或models.DateField。这个 日期必须是过去的或等于当前时间,才能使 对象公共。
- 您可以使用一个状态字段来保存有关公众的信息 对象的可用性。要使用它,必须提供status_attr 以及管理器的status_values属性。那status_attr 指定字段名。如果在列表中找到字段的值 status_values对象将是公共的。最常见的用法是 其特点是可以选择使用它。请参阅下面的示例。
示例
下面是一个非常简单的示例,仅使用is_public和pub_date 字段:
from django.db import models from django_publicmanager.managers import GenericPublicManager, PublicOnlyManager class Example(models.Model): title = models.CharField(max_length=50) is_public = models.BooleanField(default=True) pub_date = models.DateTimeField() objects = GenericPublicManager() public = PublicOnlyManager()
现在您可以访问如下对象:
>>> Example.objects.create(title='A', is_public=True, pub_date=datetime.now()) >>> Example.objects.create(title='B', is_public=True, pub_date=datetime.now() + timedelta(1)) >>> Example.objects.create(title='C', is_public=False, pub_date=datetime.now()) >>> Example.objects.create(title='D', is_public=True, pub_date=datetime.now() - timedelta(1)) >>> Example.objects.all() [<Example: A>, <Example: B>, <Example: C>, <Example: D>] >>> Example.objects.public() [<Example: A>, <Example: D>] >>> Example.public.all() [<Example: A>, <Example: D>] >>> Example.objects.public() [<Example: A>, <Example: D>] >>> Example.objects.filter(title='A').public() [<Example: A>]
您不必像上面那样命名字段。但是如果你用athor 姓名,您必须告诉经理新的姓名:
from django.db import models from django_publicmanager.managers import GenericPublicManager, PublicOnlyManager class Example(models.Model): title = models.CharField(max_length=50) online = models.BooleanField(default=True) available_from = models.DateTimeField() objects = GenericPublicManager( is_public_attr='online', pub_date_attr='available_from') public = PublicOnlyManager( is_public_attr='online', pub_date_attr='available_from')
最后但并非最不重要的是,使用status字段的示例:
from django.db import models from django_publicmanager.managers import GenericPublicManager, PublicOnlyManager class Example(models.Model): STATUS_CHOICES = ( (1, 'draft'), (2, 'review'), (3, 'public'), (4, 'featured'), ) title = models.CharField(max_length=50) status = models.PositiveIntegerField(choices=STATUS_CHOICES) objects = GenericPublicManager( status_attr='status', status_values=(3,4)) public = PublicOnlyManager( status_attr='status', status_values=(3,4))
更改日志
0.3.0-2009年12月30日
- python包索引的第一个版本。
0.9.1-2010年2月4日
- 添加对django current trunk(将为1.2)的支持
0.9.2-2010年2月4日
-
[LI]用^ {TT24}的克隆固定错误。它没有为公众过滤
属性。