我正在为我的项目使用Django 1.5.3
和PostgreSQL
。我的表中有CIDR
类型字段,我想在 Django 中对其进行建模。我正在使用一个CIDRField
赞;
class CIDRField(models.Field):
def __init__(self, *args, **kwargs):
super(CIDRField, self).__init__(*args, **kwargs)
def db_type(self, connection):
return "CIDR"
def to_python(self, value):
return str(value)
def get_db_prep_value(self, value, connection, prepared=False):
# Convert value to pure network address to prevent
# PostgreSQL exception
if IP.prefix(value):
return IP.prefix(value).first.prefix
当我使用 查询表时CIDRField
,我必须使用raw
而不是filter
;
select * from ip_table where ip<<'0.0.0.0/0'
但是我还有另一个非 CIDRField 字段,我不想用raw
. 我也没有办法同时使用它们。
也许我可以定制更多的 CIDRField,我可以使用过滤器而不是 raw 来查询 CIDRField。例如,我可以自定义、、gt
或查找函数吗?他们可以寻找, , ,而不是, , , . 我可以在 Django 中自定义此运算符吗?gte
lt
lte
<<
<<=
>>
>>=
<
<=
>
>=
谢谢你。