Django:模型字段有空白= True,null = True,unique = True会给管理员带来麻烦

nem*_*ign 2 django django-models django-admin

我有一个模型,我有:

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)
Run Code Online (Sandbox Code Playgroud)

并告诉我这里描述的麻烦:https://code.djangoproject.com/ticket/4136

我怎么解决这个问题?

我正在考虑制作一个自定义GenericIPAddressField,它将NULL插入数据库而不是空字符串.你怎么看?有其他可能的解决方案吗?

Ala*_*air 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
Run Code Online (Sandbox Code Playgroud)

如果您通过django admin编辑模型,请在那里使用您的模型表单

#!admin.py
class MyModelAdmin(admin.ModelAdmin):
    form = MyModelForm

admin.site.register(MyModel, MyModelAdmin)
Run Code Online (Sandbox Code Playgroud)