python - 编写管理器来过滤查询集结果

标签 python django django-models

我有以下代码:

class GroupDepartmentManager(models.Manager):
  def get_query_set(self):
    return super(GroupDepartmentManager, self).get_query_set().filter(group='1')

class Department(models.Model):
 name = models.CharField(max_length=128)
 group = models.ForeignKey(Group)
 def __str__(self):
    return self.name
 objects = GroupDepartmentManager()

...而且效果很好。唯一的问题是我需要将 group='1' 替换为 group=(group = models.ForeignKey(Group) 指定的组)。我花了很多时间来确定是否需要将该外键传递到类中,或者传递到 get_query_set 函数中,或者什么。我知道您可以使用 group.department_set.filter(group=desired group) 完成此操作,但我正在为管理站点编写此模型,因此我需要在之后使用变量而不是常量= 符号。

最佳答案

我有一种预感,以这种方式替换 objects 上的默认 Manager 可能不是一个好主意,特别是如果您打算使用管理站点。 . 即使它对你的Employees有帮助,但在处理Departments的时候对你一点帮助都没有。除了常用的 objects 之外,第二个属性提供部门的受限 View 怎么样?或者将标准 Managerobjects 移动到 _objects 并将 from_same_group 重命名为 objects 如果您真的更喜欢您的应用的原始方法。

class Department(models.Model):
    name = models.CharField(max_length=128)
    group = models.ForeignKey(Group)
    def __str__(self):
        return self.name
    objects = models.Manager()

    @property
    def from_same_group(self):
        return Department.objects.filter(group__exact=self.group)

此外,我知道您知道如何设置管理站点以利用有趣的 Manager;如果没有(或者如果我以某种方式误解了您的问题),请发表评论,我会尽快跟进。


编辑:好的,为了更清楚地说明这一点:如果您确实坚持要替换对象,您可能想要这样做:

class Department(models.Model):
    name = models.CharField(max_length=128)
    group = models.ForeignKey(Group)
    def __str__(self):
        return self.name

    _objects = models.Manager()

    @property
    def objects(self):
        # note the _objects in the next line
        return Department._objects.filter(group__exact=self.group)

关于python - 编写管理器来过滤查询集结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1954664/

相关文章:

python - 加载模块时使用 sys.path.insert(0, path) 和 sys.path(append) 的效果

Django 网站突然要求用户清除 cookie 以获得 CSRF token

python - 如何在 Django 中添加带有通用外键的 unique_together

python - Django 聚合。如何将其值渲染到模板中?

python - numpy 数值微分

mysql - 如何在 Django 模型字段中强制执行 char(N) 数据类型而不是 varchar(N)

Django 自定义 PasswordResetForm

python - Django 日期时间声明错误

django - 如何编写查询以在 django 的 json 字段中查找值

python - 从 Python 中的元组列表中获取配对元素