Я не уверен, что могу гуглить неправильно или просто не вижу свою ошибку.
Я использую Django 3.x с базой данных postgreSQL со схемой django2.
У меня есть модель в Django, содержащая CharField для сохранения IPv4-адреса. Да, я знаю о 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
- строка.
Фильтрация QuerySet на ip__contains=query
приводит меня к двум наблюдениям:
- при поиске номера без каких-либо точек (например, 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 есть проблемы с точками в запросах фильтра?
Заранее спасибо.