Django метод validate_unique уже существует сообщение - PullRequest
0 голосов
/ 23 апреля 2020

Мышление Как получить экземпляр pk, существующий во время validate_unique? не рекомендуется перезаписывать метод validate_unique, и я не знаю, будет ли правильно проверять уникальные поля в методе clean().

, но представьте себе следующую ситуацию: вы хотите показать admin пользователи, экземпляр которых уже существует, поэтому они могут редактировать его, если захотят, я думаю, это будет более интуитивно понятно при работе с тысячами данных.

следующий код является лишь примером - подумайте о это как псевдокод, хотя я попробовал его, и он работает, я знаю, что он мог бы быть лучше

    def clean(self):
        lockup ={}

        unique_togethers = self._meta.unique_together[0]#these could throw an error

        for field in unique_togethers:
            f = self._meta.get_field(field)

            value = getattr(self, f.attname)

            if value is None:
                 continue

            if f.primary_key and not self._state.adding:
                    continue

            lockup[str(field)] = value

        qs = snippet.objects.filter(**lockup)

        if qs.exists and self._state.adding:
            raise ValidationError(
                     format_html('''this object all ready exist plese edit it on <a href="{}">Edit</a>''', 
                                  reverse('admin:testing_snippet_change', args=(qs[0].pk,))))

Правильно ли этот подход, как применить его к методу validation_unique для работы во всех уникальных валидациях?

Результат validation message on django admin

validation message on django modelform

...