上下文
大家好,
假设我有两个模型:通过多对多关系连接的Person和Attribute(一个人可以有多个属性,一个属性可以由很多人共享)
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/