【问题标题】:Django queryset return values that don't matchDjango 查询集返回值不匹配
【发布时间】:2020-08-13 21:38:10
【问题描述】:

我正在构建一个接收邮政编码并尝试将它们与我的数据库 (Postgresql) 匹配的视图集。找到匹配项没有问题,但我很好奇返回数据库中没有匹配项的值的最佳方法。

class Location(models.Model):
    name = models.CharField(max_length=255)
    code = models.CharField(max_length=255)

我希望它把它在这个查询中找不到的东西还给我。

locations = ['77449', '11368', '60629', '99999']
valid_locations = Location.objects.filter(code__in=locations).distinct()

是否有我错过的方法可以返回任何与我的过滤器不匹配的位置 - 在这种情况下为 99999

【问题讨论】:

    标签: django postgresql django-rest-framework


    【解决方案1】:

    此时我的解决方案是获取匹配项的set() 并将其从原始位置列表中减去。

    # Subtracting two sets to get the difference and find invalid locations
    valid_locations = Location.objects.filter(code__in=locations).distinct().values_list('code', flat=True)
    invalid_locations = set(locations) - set(valid_locations)
    

    我可以引发自定义异常并将 invalid_locations 作为 api 中的错误发送回来。

    这是我上面代码的输出

    In [1]: from locations.models import Location
    
    In [2]: locations = ['77449', '11368', '60629', '99999']
    
    In [3]: valid_locations = Location.objects.filter(code__in=locations).distinct().values_list('code', flat=True)
    
    In [4]: set(locations) - set(valid_locations)
    Out[4]: {'99999'}
    

    【讨论】:

      猜你喜欢
      • 2012-07-09
      • 2012-06-05
      • 2016-12-02
      • 2013-09-22
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 2021-06-28
      相关资源
      最近更新 更多