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

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

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

Ответы [ 3 ]

13 голосов
/ 05 мая 2009

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

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)
3 голосов
/ 09 апреля 2012

Обновленный пример из документации предлагает использовать args, 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()
1 голос
/ 05 мая 2009

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

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()
...