处理数据库对象公开可用的自定义管理器。
项目描述
django-publicmanager
django-publicmanager应用程序提供了一种自定义查询集类和管理器,用于处理数据库对象的公开可用性。这些类提供了一个名为public的方法,该方法通过布尔型is_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 被设置为 True,但 pub_date 指向未来的日期,则整个对象将被视为非公开。
示例
以下是一个仅使用 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>]
您不需要将字段名称与上面完全相同。但如果使用作者名称,您必须通知管理员新名称
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-02-04
添加对 Django 当前主干的支持,它将是 1.2。
0.9.2 - 2010-02-04
修复了 PublicQuerySet 克隆的 bug。它没有对公共属性进行过滤。
项目详情
django-publicmanager-0.9.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 31429e09d04c6165b674fa94825b14cd32290b89461c419a4c73bf15b7b7ce89 |
|
MD5 | f69a346c1b17120342397d7da4fc64b9 |
|
BLAKE2b-256 | b66891681043b120d5bc5e01aad5df5501ed6aac155db919630d64c84033d1ed |