我阅读了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/