2011-10-12 72 views
2

我有,我有一个模型:Django的:具有空白=真,空=真,独特的模式字段=真给出了管理的麻烦

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插入数据库而不是空字符串。你怎么看?还有其他可能的解决方案吗

+3

你尝试覆盖模型的保存方法并替换为空字符串与无有你的模型的形式? – akonsu

+0

试过,但没有工作。反正我得到验证错误。 – nemesisdesign

回答

6

您对自定义字段GenericIPAddressField的建议可能是最干的解决方案。在上面的评论中,akonsu的建议是重写save方法,这是一个很好的建议。我用过的一个快速入门是在您的模型表单中清除值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) 
+0

thx,只要我有时间尝试这个尝试 – nemesisdesign

+0

尝试,它的作品谢谢!必须为inline_formset的东西做类似的事情。 – nemesisdesign