我正在使用Python 2.7.5
,Django 1.5.4
和PostgreSQL 9.3
。我的模型对象中有一个INET字段。字段定义就像;
class INETField(_NetAddressField):
description = "PostgreSQL INET field"
max_length = 39
__metaclass__ = models.SubfieldBase
def db_type(self, connection):
return 'inet'
def python_type(self):
return IPNetwork
def form_class(self):
return InetAddressFormField
我们需要知道的是,字段类型为inet
。到目前为止,一切都很完美。
但是当我尝试按inet field
进行过滤时,虽然必须有一些结果,但结果中没有过滤结果。所以我查看了Django
生成的查询。就像;
SELECT
......
......
FROM "ip_prefix"
WHERE (HOST("ip_prefix"."prefix") :: TEXT LIKE '%0.0.0.0/0%' AND "ip_prefix"."vrf_id" = 1 AND "ip_prefix"."afi" = '4')
ORDER BY "ip_prefix"."prefix" ASC
所以我看到了PostgreSQL的HOST方法给ip的主机部分而不是netmask(0.0.0.0)的问题。所以我需要找到生成零件的位置。我搜索了一下,然后在postgresql_psycopg2/operations
找到了它。部分是;
def field_cast_sql(self, db_type):
if db_type == 'inet':
return 'HOST(%s)'
return '%s'
我的问题不是关于 inet字段或特定内容,例如ips,网络等。我的问题是,"有没有办法覆盖某些部分db backend
中的Django
现有def field_cast_sql(self, db_type):
if db_type == 'inet':
return 'NETWORK(%s)'
return '%s'
而没有图书馆?#34;。如果我能做到这一点,我可以做到这一点;
{{1}}