我正在使用 Python 2.7.5
、 Django1.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而不是网络掩码(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'