代码之家  ›  专栏  ›  技术社区  ›  Mohanad Kaleia

如何根据django中ArrayField中的最后一个元素进行过滤

  •  0
  • Mohanad Kaleia  · 技术社区  · 7 年前

    我使用的是postgresql数据库,它允许使用数组数据类型,此外django还为此提供了postgresql特定的模型字段。 我的问题是如何根据数组的最后一个元素过滤对象?

    class Example(models.Model):
         tags = ArrayField(models.CharField(...))
    example = Example.objects.create(tags=['tag1', 'tag2', 'tag3']
    example_tag3 = Example.objects.filter(tags__2='tag3')
    

    我想过滤,但不知道什么是标签的大小。是否存在类似以下内容的动态过滤:

    example_tag3 = Example.objects.filter(tags__last='tag3')
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Cyrlop    7 年前

    我认为除了使用原始SQL之外,没有其他方法可以在不“破坏性能”的情况下做到这一点( see this ). 但是你应该避免这样做,从 the doc :

    数据库设计错误的迹象。考虑使用带有 搜索,并有可能更好地扩展为大量的

        2
  •  1
  •   Nathan    6 年前

    除了上面的答案和注释之外,如果不能更改表结构,则可以根据 第一 field__0

    example_tag3 = Example.objects.filter(tags__0='tag1')
    

    但是,我没有看到直接访问最后一个元素的方法 in the documentation