【问题标题】:Creating dynamic objects with | separator python使用 | 创建动态对象分隔符 python
【发布时间】:2012-12-12 10:43:53
【问题描述】:

我想要解决的是这样的事情

names = ['Aleister', 'Matovu']
args = (Q(name__contains=name[0])|Q(name__contains=name[1]))
queryset.complex_filter(args)

问题是我有一个动态对象的名称,它的长度不固定。我想的是,如果我循环遍历名称并创建一个动态的args 对象,但我不确定那是什么类型的对象。我不确定该怎么做,所以我被卡住了。

如果您能帮助解决这个问题,那将非常酷,或者如果您可以给我另一种方法来处理相同的场景,那将是很棒的。 谢谢

【问题讨论】:

标签: python django


【解决方案1】:
import operator
names = [...]
query = reduce(operator.or_, [Q(name__icontains=name) for name in names])
results = queryset.complex_filter(query)

【讨论】:

    【解决方案2】:

    我不知道在这种情况下Q 是什么,但也许

    import operator
    qq = [Q(name__contains=i) for i in name)]
    args = reduce(operator.or_, qq)
    

    可能会有所帮助。但由于这与Timmy wrote 相同,所以不要投票给我,而是投票给他。

    如果没有,请参阅this question here

    【讨论】:

    • ~name__contains==i for i in name~ name__contains 未定义,请添加一些上下文,谢谢
    • 算了。由于我不知道这些东西,我认为这可能是一个比较,但它是一个关键字参数。如前所述,求助于this other question,或查看Timmy's answer。更新了这个答案,但我可能很快就会删除它......
    【解决方案3】:

    这是一个非常令人满意的解决方案。如果它对任何人有任何帮助

    http://bradmontgomery.blogspot.com/2009/06/adding-q-objects-in-django.html

    q = Q(content__icontains=term_list[0]) | Q(title__icontains=term_list[0])
    for term in term_list[1:]:
        q.add((Q(content__icontains=term) | Q(title__icontains=term)), q.connector)
    
    stories = stories.filter(q)
    

    【讨论】:

      猜你喜欢
      • 2011-09-13
      • 2013-02-14
      • 2017-08-23
      • 2018-07-14
      • 1970-01-01
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      相关资源
      最近更新 更多