Django: поле модели, имеющее пустое значение = True, null = True, уникальное = True создает проблемы для администратора - PullRequest
2 голосов
/ 12 октября 2011

У меня есть модель, в которой у меня есть:

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 вместо пустой строки. Как вы думаете? Есть ли другие возможные решения?

1 Ответ

6 голосов
/ 14 октября 2011

Ваше предложение для пользовательского поля GenericIPAddressField, вероятно, является наиболее СУХИМЫМ решением.Предложение Аконсу в комментариях выше, чтобы переопределить метод сохранения, является хорошим.Быстрый взлом, который я использовал, - очистить значение до 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)
...