Django-filter:按模型属性过滤

标签 django properties django-queryset django-filter

我阅读了several places无法使用属性过滤 Django 查询集,因为 Django ORM 不知道如何将它们转换为 SQL。

但是,一旦数据被获取并加载到内存中,应该可以使用这些属性在 Python 中过滤它们。

我的问题是:是否有任何库允许根据内存中的属性过滤查询集?如果不是,那么究竟必须如何篡改查询集才能使这成为可能?以及如何将 django-filter 包含到其中?

最佳答案

你有没有困难的属性(property)? 如果不是,您可以像这样将其重写为查询集:

from django.db import models

class UserQueryset(models.Manager):

    def get_queryset(self):

        return super().get_queryset().annotate(
            has_profile=models.Exists(Profile.objects.filter(user_id=models.OuterRef('id')))
        )

class User(models.Model):
    objects = UserQueryset


class Profile(models.Model):
    user = models.OneToOneField(User, related_name='profile')


# When you want to filter by has profile just use it like has field has profile

user_with_profiles = User.objects.filter(has_profile=True)

可能不是你想要的,但在某些情况下它可以帮助你

关于Django-filter:按模型属性过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55474992/

相关文章:

java - jsp可以访问.jar文件吗?

python - 组合和排序查询集

python - Django 查询集过滤器 GT、LT、GTE、LTE 返回完整的对象列表

django - 使用带外键的Q对象定义django查询集

python - 在 HTML 按钮中引用 Django URL

python - 如何将 django 管理功能转移到前端

objective-c - 为什么大写的属性名称在 Objective-C/UITouch 中没有给出错误?

java - 这个属性文件和 "include"其他属性文件到底是如何工作的?

Django过滤器: multiple IDs in a single query string

python - 如何在Django中通过模型类创建 `ContentType`模型对象?