Вызываете внешний скрипт из интерфейса администратора Django? - PullRequest
0 голосов
/ 26 апреля 2011

У меня есть интерфейс администратора Django, который используется почти исключительно в качестве графической формы для внесения изменений в одну таблицу postgresql.Есть также скрипт Python, который в настоящее время запускается вручную из командной строки всякий раз, когда вносится изменение в базу данных, и я хотел бы подключить его так, чтобы он запускался всякий раз, когда кто-то нажимает «сохранить» после внесения изменения в строку таблицычерез интерфейс администратора.Если бы это была запись в views.py, похоже, что я импортировал бы скрипт как модуль и запустил его основную функцию из представления (т. Е. Может ли Django использовать «внешние» скрипты на python, связанные с другими библиотеками (NumPy), RPy2 ...) ).Однако я не уверен, как это сделать в интерфейсе администратора.

  • Чем admin.py похож / отличается от обычной записи в views.py?
  • Гдепоставить импорт / вызов во внешний скрипт - где-то в модели, где-то в admin.py?

Я знаком с Python, но довольно плохо знаком с (и несколько озадачен)«веб-материал» (т.е. фреймворки, такие как Django), и я даже не уверен, задаю ли я этот вопрос очень четко, потому что я все еще немного размыт относительно концепции вида / модели ...

Редактировать: Оказывается, я действительно нашел решение, прочитав документацию / учебное пособие, но предположил, что с администратором есть разница.Как упомянул Кит в комментариях, у меня сейчас проблемы с разрешениями, но я думаю, что это отдельная проблема.Так что спасибо, и, может быть, я перестану догадываться ...

Ответы [ 2 ]

2 голосов
/ 26 апреля 2011

Обычно все, что вы хотите сделать во время «сохранения», это либо

  1. Часть модели.

    Если это так, вы переопределяете метод модели save: http://docs.djangoproject.com/en/1.3/ref/models/instances/#saving-objects

    Вы можете сделать что угодно в этом save методе.

  2. Часть функции просмотра.

    Если это так, вы либо расширяете интерфейс администратора (не так просто), либо пишете свой собственный.

1 голос
/ 26 апреля 2011

Одна вещь, которую вы можете рассмотреть, - это определение метода save_model в вашем ModelAdmin.Это будет выполнено, когда кто-то спасет от администратора (но не когда кто-то сделает сохранение вне администратора).Этот подход может зависеть от ваших требований, но он должен дать вам необходимую ловушку при выполнении сохранения от администратора.

In admin.py

class MyModelAdmin(admin.ModelAdmin):

    model = models.MyModel

    def save_model(self, request, obj, form, change):

        # you can put custom code in here
        obj.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...