【问题标题】:Django equivalent of SQL not inDjango 中的 SQL 等价物不在
【发布时间】:2012-02-18 16:25:50
【问题描述】:

我有一个非常简单的查询:select * from tbl1 where title not in('asdasd', 'asdasd')

如何将它翻译成 Django?这就像我想要的相反:Table.objects.filter(title__in=myListOfTitles)

【问题讨论】:

    标签: django django-orm


    【解决方案1】:

    尝试使用exclude

    Table.objects.exclude(title__in=myListOfTitles)
    

    【讨论】:

    • 这不适用于相关字段。否定不等于不加入。例如Publisher.objects.filter(book__author__in=XXX)。
    • 也许你应该一步一步来。这是我的一个应用程序中的一行:User.objects.exclude(id__in=Group.objects.get(id=kwargs['group_id']).user_ids.all()),它返回不在以group_id 为 id 的组中的所有用户。
    • 请注意,排除条件之间的“或”位置。
    【解决方案2】:
    Table.objects.exclude(title__in=myListOfTitles)
    

    【讨论】:

      【解决方案3】:

      (这个帖子很旧,但仍然可以用谷歌搜索)

      您可以将models.Q 与“~”一起使用,如下所示:

      Table.objects.filter(~Q(title__in=myListOfTitles))
      

      当你有多个条件时,这个方法特别有用。

      【讨论】:

        【解决方案4】:

        Django 提供了两个选项。

        exclude(<condition>)
        filter(~Q(<condition>))
        

        使用Q()方法的方法2

        >>> from django.db.models import Q
        >>> queryset = User.objects.filter(~Q(id__lt=5))
        

        【讨论】:

          猜你喜欢
          • 2021-08-24
          • 2013-08-11
          • 2010-11-07
          • 2017-11-22
          • 1970-01-01
          • 2017-01-15
          • 1970-01-01
          • 2015-02-06
          • 2010-09-29
          相关资源
          最近更新 更多