Django Admin: добавить текст во время выполнения рядом с полем - PullRequest
3 голосов
/ 10 июня 2011

Я хочу добавить текст рядом с полем интерфейса администратора django.

Предупреждение должно быть создано во время выполнения внутри метода python. Я хорошо знаю Python и ORM django, но не знаю, как получить текст рядом с полем.

Текст должен быть предупреждением. Повышение ValidationError в clean () не является решением, так как пользователь больше не может редактировать страницу. Это должно быть просто предупреждающее сообщение.

Ответы [ 3 ]

6 голосов
/ 29 августа 2011

Вы можете использовать пользовательский подкласс ModelForm для администратора, добавив атрибут help_text для рассматриваемого поля при его инициализации и соответствующим образом стилизовав его.

# forms.py

class YourModelForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(YourModelForm, self).__init__(*args, **kwargs)
        self.fields['field_in_question'].help_text = generate_warning()

# admin.py

class YourModelAdmin(admin.ModelAdmin):
    form = forms.YourModelForm

    # And here you can specify custom CSS / JS which would make
    # `help_text` for that particular field look like a warning.
    # Or you can make it generic--say, style (and maybe reposition w/js) all tags
    # like <span class="warning"> that occur within the help text of any field.

    class Media:
        css = {"all": ("admin_warning.css", )}
        js = ("admin_warning.js", )
0 голосов
/ 28 августа 2011

Если вы хотите сделать это в виде списка изменений, вы можете написать в методе модели, который возвращает строку в нужном вам формате, и поместить имя этого метода в list_display в admin.

class MyModel(models.Model):
    myfield = models.CharField(max_length=100)

    def myfield_with_warning(self):
       return '%s - %s' % (self.myfield, '<span class="warn">My warning message</p>'
    myfield_with_warning.short_description = 'My field verbose name'
    myfield_with_warning.allow_tags = True

class MyModelAdmin(models.ModelAdmin):
    list_display = ('myfield_with_warning',)

Если этоне то, что вам нужно, напишите точнее, где вы хотите отобразить предупреждающее сообщение.

0 голосов
/ 24 августа 2011

Я думаю, что самым простым способом было бы переопределить конкретную страницу администратора для этой модели. Это описано здесь в документации Django. Шаблон, который нужно переопределить, вероятно, change_form.html. Внутри этих шаблонов отображаемый объект доступен в переменной шаблона original.

Я бы добавил метод или свойство к вашей модели, которое генерирует и возвращает сообщение об ошибке и вызывает этот метод из шаблона.

Редактировать : посмотрите на contrib/admin/templates/admin/change_form.html, есть включение для includes/fieldset.html, которое отображает поля сайта администратора. Вы можете поместить туда код, который проверяется, если модель имеет какой-то специальный именованный атрибут, и если так, то он отображается. Вы можете просто переопределить это change_form.html для всех моделей с вашей пользовательской.

...