Добавление пользовательской кнопки или тега для администратора django - PullRequest
0 голосов
/ 14 июня 2011

Я хочу добавить html-элемент (кнопку, тег "и т. Д.") На страницу администрирования django.Как мне это сделать?Пожалуйста, помогите.

Ответы [ 3 ]

1 голос
/ 14 июня 2011

Не уверен, где вы хотите добавить свои вещи, но это решение, которое я нашел где-то еще в SO, чтобы изменить HTML-файл FileField (в моем случае я хотел отобразить текущее изображение в ImageField).

Другими словами, вы можете создать виджет, который изменяет html поля, которое вы хотите настроить:

# Widget that modifies the output of a FileField
class OutputWidget(AdminFileWidget):
    # Overloaded django magic
    def render(self, name, value, attrs=None):
        output = []
        # This is the place where we edit the output    
        if value and getattr(value, "url", None):
            image_url = value.url
            output.append(u' <a href="%s" target="_blank"><img src="%s" alt="%s" /></a>' % (image_url, image_url, image_url))
        output.append(super(AdminFileWidget, self).render(name, value, attrs))
        return mark_safe(u''.join(output))

# ModelAdmin class that is applied to the model
class MyModelSettings(admin.ModelAdmin):
    # Overloaded django magic
    def formfield_for_dbfield(self, db_field, **kwargs):
        # Look for the field we want to edit and register the widget with it
        if db_field.name == 'nameOfFieldIWantToEdit':
            request = kwargs.pop("request", None)
            kwargs['widget'] = OutputWidget
            return db_field.formfield(**kwargs)
        return super(MyModelSettings,self).formfield_for_dbfield(db_field, **kwargs)

# Register my overloaded settings with the model
admin.site.register(MyModel, MyModelSettings)

Код отправляется в admin.py, где вы регистрируете свои модели.

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

Я использовал решение Omokoli сверху, но чтобы поле использовало мой собственный виджет, я сделал:

class MyModelAdminForm(forms.ModelForm):
    class Meta:
        model = get_model('myapp', 'mymodel')
        widgets = {
            'original_link': OutputWidget,
        }
0 голосов
/ 14 июня 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...