Изменение регистра (верхний / нижний) при добавлении данных через сайт администратора Django

StackOverflow https://stackoverflow.com/questions/825955

  •  05-07-2019
  •  | 
  •  

Вопрос

Я настраиваю админ-сайт моего нового проекта, и у меня есть небольшие сомнения относительно того, как мне поступить, при нажатии «Сохранить» при добавлении данных через админ-сайт все преобразуется в верхний регистр ...

Изменить: Хорошо, я знаю свойство .upper, и я сделал представление, я бы знал, как это сделать, но мне интересно, есть ли какое-либо свойство, доступное для конфигурации поля на сайте администратора: P

Это было полезно?

Решение

Если ваша цель состоит в том, чтобы при сохранении в разделе администратора только преобразовывать вещи в верхний регистр, вам нужно создать форму с настраиваемой проверкой , чтобы внести изменения в регистр:

class MyArticleAdminForm(forms.ModelForm):
    class Meta:
        model = Article
    def clean_name(self):
        return self.cleaned_data["name"].upper()

Если ваша цель состоит в том, чтобы всегда иметь значение в верхнем регистре, тогда вам следует переопределить сохранение в поле модели:

class Blog(models.Model):
    name = models.CharField(max_length=100)
    def save(self, force_insert=False, force_update=False):
        self.name = self.name.upper()
        super(Blog, self).save(force_insert, force_update)

Другие советы

Обновленный пример из документации предлагает использовать аргументы arg, kwargs как:

  

Django будет время от времени расширять возможности встроенных   модельные методы, добавление новых аргументов. Если вы используете * args, ** kwargs в   ваши определения методов, вы гарантированно, что ваш код будет   автоматически поддерживать эти аргументы при их добавлении.

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

    def save(self, *args, **kwargs):
        do_something()
        super(Blog, self).save( *args, **kwargs) # Call the "real" save() method.
        do_something_else()

вы должны переопределить сохранение ( ) . Пример из документации:

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

    def save(self, force_insert=False, force_update=False):
        do_something()
        super(Blog, self).save(force_insert, force_update) # Call the "real" save() method.
        do_something_else()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top