2011-10-12 20 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