基于多个条件筛选用户数据。
django_sieve的Python项目详细描述
对于许多Web应用程序,博客作为一个典型的例子出现在人们的脑海中,QuerySet需要根据一些业务规则在视图中进行过滤。例如,在博客中,允许编辑文章的“仪表板”视图应该只允许当前登录的用户撰写文章。
一般来说,需要基于某些业务逻辑过滤数据-通用!也就是在每一个角落。这样做的丑陋方式是在每个视图中编写查询来证实业务逻辑。筛子做同样的工作漂亮,最少和正确。
安装
我们在芝士店:
pip install django_sieve
用法
在项目中使用django_筛:
将其包含在您的设置文件中已安装的应用程序中。
定义筛子模型。筛选模型是定义用户数据过滤标准的控件。例如,在我们的示例中,我们有一个书店,用户可以在其中订阅来自某个特定作者的所有书籍或来自几个出版商的所有书籍。在这种情况下,他的书单只需要包含他选择的作者和出版商的书。为了做到这一点,我们定义了这样一个筛选模型:
class Sieve(models.Model): group = models.ForeignKey('auth.Group') publisher = models.ManyToManyField(Publisher) author = models.ForeignKey(Author)
在settings.py中声明项目范围的筛选模型。例如,如果sieve模型被称为sieve并驻留在书店应用程序中:
SIEVE_MODEL = 'bookstore.Sieve'
使用sievemanager作为项目中所有模型的modelmanager,您希望根据sieve模型中定义的条件筛选这些模型:
class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=40) email = models.EmailField() objects = SieveManager()
使用筛方法在视图中定义查询集,如下所示:
class BookView(ListView): queryset = Book.objects.sieve(user=request.user)
仅此而已。基于预定义条件对用户数据进行站点范围的筛选,而不必为所有视图编写查询。
不过,请注意性能问题-根据我们的经验,django-sieve适用于90%的情况,特别是当您需要快速演示时。然而,随着站点的成熟和用户数量的增加,您可能希望投资于分析您的视图,并在需要的时候和需要的地方手工创建这些查询。
历史记录
I.0.0(2014年)
- 测试覆盖率达到93%。
0.3.0(2014年)
- 将映射从用户更改为组,处理自引用模型等。
0.2.0(2014年)
- 增加了对sieve_模型中多个字段的支持
0.1.0(2014年)
- pypi上的第一个版本。