我在Django中定义了一个模型.我想为它的QuerySet对象定义一些自定义方法.(即我想定义自定义方法来过滤该对象的实例,其方式仅限于该模型.)
现在,我可以在上面定义那些Manager,但是这些方法只能在该模型上进行,Manager而不能QuerySet在该模型上进行任何过滤的任何单独访问.
那么:我如何给出QuerySet模型自定义过滤方法的对象?
如果你需要过滤链延长Queryset.
我当前项目的一个例子:
from django.db import models
from django.db.models.query import QuerySet
class MemberQuerySet(QuerySet):
def in_group(self, group):
return self.filter(group_set__pk=group.pk)
def not_in_group(self, group):
return self.exclude(groups_set__pk=group.pk)
class MemberManager(models.Manager):
def get_queryset(self):
return MemberQuerySet(self.model, using=self._db)
def in_group(self, group):
return self.get_queryset().in_group(group)
def not_in_group(self, group):
return self.get_queryset().not_in_group(group)
class Member(models.Model):
# ...
objects = MemberManager()
Run Code Online (Sandbox Code Playgroud)
有了这个你可以做:
Member.objects.in_group(one_group).not_in_group(another_group)
Run Code Online (Sandbox Code Playgroud)
如果您不需要过滤器链接,那么使用自定义方法的经理就足够了.这在文档中已经很好地介绍了.
这段代码似乎很适合更快的QuerySet插件,但它已经很久了(4年)而我从未尝试过.
| 归档时间: |
|
| 查看次数: |
1253 次 |
| 最近记录: |