跳转到主要内容

处理数据库对象公开可用的自定义管理器。

项目描述

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.DateTimeFieldmodels.DateField。日期必须是过去或等于当前时间,才能使对象公开。

  • 您可以使用一个状态字段来存储有关对象公开可用性的信息。要使用它,您必须向管理员提供 status_attrstatus_values 属性。其中 status_attr 指定字段名称。如果字段的值在列表 status_values 中找到,则对象将是公开的。此功能的常见用途是与选项一起使用。请参阅下面的示例。

只有当这些字段(如果存在于模型中)都评估为公开时,对象才是公开的。这意味着如果 is_public 被设置为 True,但 pub_date 指向未来的日期,则整个对象将被视为非公开。

示例

以下是一个仅使用 is_publicpub_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 (5.2 kB 查看哈希值)

上传时间 源代码

由以下机构支持