Дополнительные поля в интерфейсе администратора Django - PullRequest
0 голосов
/ 29 ноября 2010

Предположим, у меня есть какое-то постоянное свойство модели, которое не поддерживается полем модели, как мне разрешить редактировать это поле в интерфейсе администратора?

Пример настройки:

# models.py

# appropriate imports...

class MyModel(Model):
      # regular fields.
    foo = CharField(max_length=50)
    bar = BooleanField()
    # ...

      # custom property, backed by a file.
    def _get_meh ( self ):
        return ... # read from file
    def _set_meh ( self, value ):
        ... # write to file.
    meh = property(_get_meh, _set_meh)
Значение

meh фактически сохраняется в файле на диске, путь которого зависит от значения в foo. Я хотел бы иметь возможность редактировать значение meh из интерфейса администратора.

# admin.py

# appropriate imports...

class MyModelAdmin(ModelAdmin):
    # what do I put here?

Примечание : если кому-то нужно спросить, я использую Django версии 1.2.1, но возможно обновление, если этого требует ваше решение. Все, что работает на Python 2.5, подойдет, но сейчас я не могу его обновить.

Ответы [ 2 ]

1 голос
/ 12 января 2011

Взгляните на это: http://www.scribd.com/doc/68396387/Adding-extra-fields-to-a-model-form-in-Django%E2%80%99s-admin-%E2%80%93-Hindsight-Labs (этот перешел в автономный режим, http://www.hindsightlabs.com/blog/2010/02/11/adding-extra-fields-to-a-model-form-in-djangos-admin/)

По сути, вы создадите подкласс MyModelFrom из форм .ModelForm и:

  1. Добавьте дополнительные поля meh в определение MyModelFrom.
  2. Переопределить конструктор MyModelFrom, установить свойство meh self.initial, если экземпляр формы был передан в форму.
  3. Переопределите метод сохранения MyModelFrom, установите свойство meh для экземпляра модели на основе полей формы.

Таким образом, свойство meh будет правильно заполнено в вашей модели, но вам также потребуется переопределить метод save () MyModel, чтобы фактически сохранить это значение в файле на диске:

(Google для "сохранения переопределения модели django", простите, кажется, я не могу опубликовать больше, чем ссылку на ответ, пока не получу более 10 повторений ...)

Приветствия

1 голос
/ 01 декабря 2010

Знание Ny Django не так уж велико, но, в зависимости от того, насколько сложным вы хотите, я не уверен, что что-то подобное можно легко сделать без особых взломов.

Во всяком случае, если вы хотитечтобы добавить его на страницу «Добавить мою модель», вы можете отредактировать соответствующий шаблон администратора.

Итак, в вашем каталоге шаблонов создайте что-то вроде:

admin/app_label/MyModel/change_form.html

Затем расширьте базовый шаблон и добавьте свойсобственный контент:

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

{% block something_you_want_to_override %}
    <p>Your HTML goes here</p>
{% endblock %}

Неужели нет никакого способа, которым вы можете вставить это настраиваемое поле в настоящее поле Django?Конечно, вы можете переопределить метод save () в модели и сделать это таким образом?Или использовать сигнал pre_save?

Приветствия, Виктор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...