Django - отображение и поведение пользовательских полей администратора - PullRequest
3 голосов
/ 11 августа 2011

Давайте представим эту модель:

class ScribPart(models.Model):
  name = models.CharField(max_length=50, unique=True)
  text = models.TextField()

Я бы хотел прикрепить определенный класс к полю text и вызвать конкретный файл js.Чтобы страница администратора была похожа на:

...
<script type="text/javascript" src="/static/js/mymarkup.js"></script>
...
<textarea id="id_text" name="text" class="mymarkup"></textarea>
...

Как я могу сделать это с помощью виджета и / или пользовательской формы администратора?

Ответы [ 3 ]

5 голосов
/ 11 августа 2011

Чтобы вставить <script> на страницу администратора, самое простое:

class ScribPartAdmin(model.ModelAdmin):
    ...
    your normal stuff...
    ...

    class Media:
        js = ('/path/to/your/file.js',)

Документация по определениям носителей ModelAdmin

Теперь, чтобы добавить атрибут class к textarea, я думаю, что самый простой способ сделать это так:

from django import forms

class ScribPartAdmin(model.ModelAdmin):
    ...
    your normal stuff...
    ...

    class Meta:
        widgets = {'text': forms.Textarea(attrs={'class': 'mymarkup'})}

Переопределение документации виджетов по умолчанию

Я должен добавить, что этот подход хорош для одноразового использования. Если вы хотите многократно использовать свое поле или JS, есть лучшие способы сделать это (пользовательский виджет для поля, с указанием файла JS, если JS исключительно связан с полем, расширение шаблона для включения файла JS во многих местах) .

1 голос
/ 11 августа 2011

Вы должны создать шаблон, поместить его в templates / admin / change_form_scribepart.html со следующим содержанием:

{% extends "admin/change_form.html" %}
{% load i18n %}

{% block content %}
    <script type="text/javascript" src="/static/js/mymarkup.js"></script>
    {{ block.super }}
{% endblock %}

Кроме того, не забудьте активировать этот новый шаблон администратора в ScribPart ModelAdmin:

class ScribPartAdmin(admin.ModelAdmin):   
    ordering = ...
    fieldsets = ...
    change_form_template = "admin/change_form_scribpart.html"
0 голосов
/ 11 августа 2011

Вы можете отправить свою форму с пакетом json и получить (проверить) с этим кодом

results = ScribPart.all()
    for r in results :

        if r.test == id_text:
            self.response.out.write("<script type='text/javascript' src='/static/js/"+r.name+"mymarkup.js'></script>")
...