Django django-filters ipaddress mysql
фильтр для ip не работает должным образом
model.py
class Network(models.Model):
start_ip_address = models.GenericIPAddressField(protocol='both', blank=True, null=True)
end_ip_address = models.GenericIPAddressField(protocol='both', blank=True, null=True)
filters.py
class NetworkFilter(django_filters.FilterSet):
f_by_address = django_filters.CharFilter(method='filter_by_address', label="BY ADDRESS")
def filter_by_address(self, queryset, name, value):
return queryset.filter(start_ip_address__lt=value, end_ip_address__gt=value)
class Meta:
model = Network
fields = ['id', 'start_ip_address',]
фильтр по адресу результат в
SELECT `network_network`.`id`, start_ip_address, `network_network`.`end_ip_address` FROM `network_network` WHERE (`network_network`.`end_ip_address` > 10.172.148.12 AND `network_network`.`start_ip_address` < 10.172.148.12) ORDER BY `network_network`.`id` ASC
моя таблица содержит так много записей, но даже сейчас у меня возникли проблемы.
mysql> SELECT start_ip_address, end_ip_address from network_network where (end_ip_address > '10.172.148.12' AND start_ip_address < '10.172.148.12');
+------------------+----------------+
| start_ip_address | end_ip_address |
+------------------+----------------+
| 10.172.14.1 | 10.172.15.254 |
| 10.172.148.1 | 10.172.149.254 |
+------------------+----------------+
2 rows in set (0.01 sec)
mysql> SELECT start_ip_address, end_ip_address FROM network_network WHERE (INET_ATON("10.172.148.12") BETWEEN INET_ATON(start_ip_address) AND INET_ATON(end_ip_address));
+------------------+----------------+
| start_ip_address | end_ip_address |
+------------------+----------------+
| 10.172.148.1 | 10.172.149.254 |
+------------------+----------------+
1 row in set (0.01 sec)
Не уверен, что нужно сделать, чтобы этот фильтр точно работал над django ORM. Не могу использовать необработанный SQL, так как пример упрощен.
Если у вас не работает, вы можете использовать extra filter для применения sql-условия строки
Подробнее о extra