我有一个模型,我有:
ipv4_address = models.IPAddressField(verbose_name=_('ipv4 address'), blank=True, null=True, unique=True, default=None)
ipv6_address = models.GenericIPAddressField(protocol='IPv6', verbose_name=_('ipv6 address'), blank=True, null=True, unique=True, default=None)
并告诉我这里描述的麻烦:https://code.djangoproject.com/ticket/4136
我该如何解决这个问题?
我正在考虑制作一个自定义GenericIPAddressField,它将NULL插入数据库而不是空字符串。你怎么看?还有其他可能的解决方案吗?
答案 0 :(得分:6)
您对自定义字段GenericIPAddressField
的建议可能是最干的解决方案。 akonsu在上面的评论中建议覆盖保存方法是一个很好的建议。我使用的快速黑客方法是将值清除为模型表单中的None
。
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
def clean_ipv6_address(self):
"""
Return None instead of empty string
"""
return self.cleaned_data.get('ipv6_address') or None
如果您通过django管理员编辑模型,请使用您的模型表单
#!admin.py
class MyModelAdmin(admin.ModelAdmin):
form = MyModelForm
admin.site.register(MyModel, MyModelAdmin)