postgresql Django查询集返回不匹配的值

pexxcrt2  于 5个月前  发布在  PostgreSQL
关注(0)|答案(2)|浏览(55)

我正在构建一个视图集,它接受邮政编码并试图将它们与我的数据库(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

bt1cpqcv

bt1cpqcv1#

在这一点上,我的解决方案是获得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'}

6yt4nkrj

6yt4nkrj2#

你可以使用Django模型Q对象来过滤
https://docs.djangoproject.com/en/5.0/topics/db/queries/#complex-lookups-with-q-objects
或者在您的情况下,简单的.exclude(code__in=locations)也可以工作

相关问题