【发布时间】:2020-01-31 10:02:23
【问题描述】:
我不确定我是否可能在谷歌上搜索错了,或者我只是看不到我的错误。
我正在使用 Django 3.x 和一个带有名为 django2 的架构的 postgreSQL 数据库。
我在 Django 中有一个模型,其中包含一个用于保存 IPv4 地址的 CharField。是的,我知道 GenericIPAddressField 并且可能会切换到那个。
class APN(models.Model):
address = models.CharField(max_length=64)
username= models.CharField(max_length=64, unique=True, primary_key=True)
password = models.CharField(max_length=64)
ip = models.CharField(max_length=64)
responsible_user= models.CharField(max_length=64, null=True)
assigned = models.BooleanField(default=False)
现在我想使用results_apn = APN.objects.filter(ip__contains=query) 进行过滤,其中query 是一个字符串。
过滤 ip__contains=query 上的 QuerySet 导致我有两个观察结果:
- 在查找不带任何点的数字(例如 100 或 254)时,我将获取包含该特定字符串的所有 IP
- 当查找 IP 的一部分或完整 IP(例如 10.171.16.14 或 17.128)时,我不会得到任何结果。
我得到了 Django 生成的查询(QuerySet.query):
SELECT "sim_apn"."address", "sim_apn"."username", "sim_apn"."password", "sim_apn"."ip", "sim_apn"."responsible_user", "sim_apn"."assigned" FROM "sim_apn" WHERE "sim_apn"."ip"::text LIKE %10.171.16.14%
Ad 如果我直接在 SQL 中使用它,那么我会得到一个结果。但是 Django 不想给我一个答案。
是我遗漏了什么还是 Django 在过滤器查询中的点有问题?
提前致谢。
【问题讨论】: