gpt4 book ai didi

python - 将过滤器附加到 django 模型

转载 作者:行者123 更新时间:2023-12-01 04:57:12 24 4
gpt4 key购买 nike

上下文

大家好,

假设我有两个模型:通过多对多关系连接的PersonAttribute(一个人可以有多个属性,一个属性可以由很多人共享)

class Attribute(models.model):
attribute_name = models.CharField(max_length=100)
attribute_type = models.CharField(max_length=1)

class Person(models.model):
article_name = models.CharField(max_length=100)
attributes = models.ManyToManyField(Attribute)
  • 属性可以是头发颜色、地点、大学学位等。
  • 例如,某个属性的“attribute_name”可能为“计算机科学”,“attribute_type”为“D”(学位)。
  • 另一个例子是“伦敦”、“L”。

问题

在此网页上,用户可以按属性选择人员。例如,他们可能想查看所有居住在伦敦并且拥有历史和生物学学位(所有 AND 关系)的人。

据我了解,这可以用以下形式表示(为了易读性而中断):

Person.objects
.filter(attributes__attribute_name='London', attributes__attribute_type='L')
.filter(attributes__attribute_name='History', attributes__attribute_type='D')
.filter(attributes__attribute_name='Biology', attributes__attribute_type='D')

但是,用户同样可以要求具有四个不同学位的用户。关键是,我们不知道用户会在搜索功能中询问多少属性。

问题

  • 因此,如果我们不知道用户将请求多少属性以及什么类型的属性,那么附加这些过滤器的最佳方式是什么?
  • 像这样附加过滤器是最好的方法吗?

谢谢!

尼克

最佳答案

您可以获取用户选择的所有属性,然后迭代:

# sel_att holds the user selected attributes.

result = Person.objects.all()

for att in sel_att:
result = result.filter(
attributes__attribute_name=att.attribute_name,
attributes__attribute_type=att.attribute_type
)

关于python - 将过滤器附加到 django 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27115013/

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