Sha*_*rma 3 python django django-models
我正在尝试创建一个函数,我希望用户输入一些细节,并在此基础上我需要过滤掉这些数据并返回它.
例如,如果在我的模型名称中,我有:
名称.年龄,性别然后我想做:
Profile.objects.filter(name=name, age=age, gender=gender)
姓名,年龄和性别是由用户提供的值.现在,如果用户输入name ='Shashank'并将年龄和性别留空,那么我需要查询它:
Profile.objects.filter(name='Shashank')
而忽略所有那些空白值.所以我不确定如何实现这种行为.我可以设置什么类型的初始值,以便它不会影响搜索结果.
Profile.objects.filter(name='Shashank', age=<VALUE>, gender=<VALUE>)
<VALUE>过滤函数可以忽略哪里.
注意:我不想编写所有可能的filter语句组合,因为它不方便.
我尝试过使用None,False但它给出了错误的结果
您可以为此创建一个管理器方法.
class ProfileManager(models.Manager):
def myfilter(self, **filters):
filters = {k:v for k,v in filters.items() if v is not None}
qs = self.get_queryset()
return qs.filter(**filters)
Run Code Online (Sandbox Code Playgroud)
务必在模型中设置管理器
class Profile(models.Model):
objects = ProfileManager()
# the rest of the model
Run Code Online (Sandbox Code Playgroud)
然后你可以传递name age和gender(或任何其他列)objects.myfilter,它将忽略任何值None.
# assume the following values are retrieved
# name = 'Shashank'
# age = None
# gender = None
qs = Profile.objects.myfilter(name=name, age=age, gender=gender)
Run Code Online (Sandbox Code Playgroud)
这里的qs应该是相同的 objects.filter(name=name)
| 归档时间: |
|
| 查看次数: |
518 次 |
| 最近记录: |