gpt4 book ai didi

python - 如何在 Django 中设置默认值,同时从模型中过滤对象

转载 作者:行者123 更新时间:2023-12-03 00:11:13 27 4
gpt4 key购买 nike

我正在尝试创建一个函数,我希望用户输入一些详细信息,并在此基础上我需要过滤掉这些数据并返回它。

例如,如果在我的模型名称配置文件中我有:

名称。年龄,性别,然后我正在尝试做:

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>可以被过滤函数忽略。

注意:我不想写所有可能的过滤语句组合,因为这样不方便。

我尝试使用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)

一定要在模型中设置管理器

class Profile(models.Model):
objects = ProfileManager()
# the rest of the model

然后您可以将 name agegender (或任何其他列)传递给 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)

这里的qs应该与objects.filter(name=name)相同

关于python - 如何在 Django 中设置默认值,同时从模型中过滤对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49451987/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com