django - 在 Django 中是否可以在反向相关对象查找中调用自定义 `QuerySet` 方法?
问题描述
例如,有 nextmodels
和 custom QuerySet
:
from django.db import models
class ActiveQuerySet(models.QuerySet):
def active(self):
'''returns only active objects'''
'''supposing here would be a lot
of more complicated code
that would be great to reuse
'''
return self.filter(is_active=True)
class Category(models.Model):
name = models.CharField(max_length=128, blank=True, null=True, default=None)
class Product(models.Model):
name = models.CharField(max_length=128, blank=True, null=True)
is_active = models.BooleanField(default=True)
category = models.ForeignKey(Category, on_delete=models.SET_NULL, related_name='products', related_query_name="product", blank=True, null=True, default=None)
objects = ActiveQuerySet.as_manager()
你能告诉我是否有办法调用这样的active()
方法:
category = Category.objects.first()
category.products.active()
而不是这样做:
category.products.filter(is_active=True)
或者如何适当地实施这种行为?
解决方案
您必须将自定义查询集添加到父模型中,而不是 _set。您可以将 custom_products 更改为任何其他词。
class ActiveQuerySet(models.QuerySet):
def active(self):
'''returns only active objects'''
'''supposing here would be a lot
of more complicated code
that would be great to reuse
'''
return self.products.filter(is_active=True)
class Category(models.Model):
name = models.CharField(max_length=128, blank=True, null=True, default=None)
custom_products = ActiveQuerySet.as_manager()
category.custom_products.active()
推荐阅读
- java - 将模块添加到项目时出错:非法字符:> 在索引 23
- python - 将一个张量乘以一个标量得到一个由 Nans 组成的张量
- java - IntelliJ 依赖项 - 规范和实现之间的差异
- c++ - 请求输入时强制用户输入特定模式
- vue.js - 获取上一张图片的宽度和高度,而不是刚刚上传的图片
- python - 获取子类名python
- java - 从固定点旋转 imageView
- php - VSCode 缩进问题上的 Laravel 刀片
- javascript - 在javascript中禁用chrome密码更改警告
- c++ - 我怎样才能设置这个,所以我不能为cin输入超过四个数字?