gpt4 book ai didi

python - 使用动态数量的字段构建一个 Django 优雅过滤器

转载 作者:行者123 更新时间:2023-12-04 10:29:18 25 4
gpt4 key购买 nike

我有一个 Django 模型,我正在为它做一个 View ,它过滤结果。

模型.py:

Ingredient(models.Model):
account = models.ForeignKey(Account, on_delete=models.CASCADE, null=False)
brand = models.ForeignKey(Brand, on_delete=models.CASCADE, null=False)
name = models.CharField(max_length=100, null=False, blank=False)
cost = models.DecimalField(max_digits=14, decimal_places=2, null=False)

现在的重点是搜索表单(当然,除了 account 之外的每个字段都有),它的任何字段都不是必需的,您可以仅按单个字段或两个或三个字段进行过滤。

问题是我不能这样做:
Ingredient.objects.filter(account=account, brand=brand, name=name, cost=cost)

...因为品牌、名称和成本可以发送为空/空

如何在不为每种过滤可能性制作过滤器行代码的情况下解决此问题?

最佳答案

我们可以制作一个效用函数来过滤掉 None s。例如:

from django.db.models import Q

def filter_without_none(**kwargs):
return Q(**{k: v for k, v in kwargs.items() if v is not None and v != ''})

现在我们可以过滤:
Ingredient.objects.filter(
filter_without_none(account=account, brand=brand, name=name, cost=cost)
)

如果一个(或多个)值如 account , brand和/或 nameNone ,过滤时不会考虑这些。

关于python - 使用动态数量的字段构建一个 Django 优雅过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60478689/

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