【问题标题】:Some other filter其他一些过滤器
【发布时间】:2010-12-28 03:47:00
【问题描述】:

我有问题。我有一个看起来像“var1,var2”的字符串,数据库中的表包含一些记录,看起来像“var1,var3”,“var3”,“var2,var3”,我想通过拆分第一个字符串来过滤它们。当我的任何字符串变量适合数据库变量时,django 将显示它们。所以,当我有这样的字符串变量:“var1,var2”和数据库变量,如:“var1,var3”,“var3”,“var2,var3”时,django将显示“var1,var3”,“var2,var3 ”。 我怎样才能做到这一点?当我直接按 Data.objects.filter 过滤时,Django 只显示包含所有字符串变量的记录。

对不起,我的英语很差,希望大家理解。 干杯。

【问题讨论】:

    标签: python django


    【解决方案1】:

    我认为您想要的是 OR 查找。试试这个:

    var_string = 'var1,var2'
    vars = var_string.split(',')
    
    result = MyModel.objects.none()
    
    for var in vars:
      result |= MyModel.objects.filter(name__icontains=var.strip())
    
    return result
    

    您可能希望将其放在 Manager 中以实现可重用性。但就个人而言,我会尝试找出为什么在数据库中以这样的方式存储名称并修复它。

    【讨论】:

      【解决方案2】:

      与这种方法相比,您可能会更幸运地将外键或分组号添加到您的模型中,这样您就可以使用数据库为您进行拆分。

      所以不要这样:

      class MyModel(models.Model): 
          vars = models.CharField(max_length=200)
      
      m = MyModel(vars="var1,var2")
      m.save()
      m = MyModel(vars="var2,var3")
      m.save()
      

      这样做:

      class MyModel(models.Model):
          group = models.IntegerField()
          var = models.CharField(max_length=200)
      
      m = MyModel(group=1, var="var1")
      m.save()
      m = MyModel(group=1, var="var2")
      m.save()
      
      m = MyModel(group=2, var="var2")
      m.save()
      m = MyModel(group=2, var="var3")
      m.save()
      

      然后你可以这样查询:

      MyModel.objects.filter(group=1)
      

      或者像这样:

      MyModel.objects.filter(var="var1")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-02
        相关资源
        最近更新 更多