Django-admin: изменение значений полей в форме изменений перед рендерингом - PullRequest
0 голосов
/ 02 февраля 2012

В пользовательском представлении есть ссылка, которая указывает на Django-admin форму изменения конкретного экземпляра модели. Цель состоит в том, чтобы изменить значения некоторых полей формы перед отображением формы, например, можно предварительно заполнить поля в форме добавления, добавив параметры (ModelFieldName = value) для добавления URL-адреса формы. Как изменить значения в полях формы изменения перед рендерингом? Может быть, я должен создать свою ModelForm, изменить значения полей в нем и назначить для переменной формы ModelAdmin? Если да, то как изменить значения полей ModelForm?

1 Ответ

1 голос
/ 02 февраля 2012

Я только что подумал, что ModelAdmin.add_view использует request.GET для установки начального значения в строке 900 django / contrib / admin / options.py.

Таким образом, чтобы предварительно заполнить поле «name» формы добавления someapp.somemodel с помощью «bar», просто откройте: / admin / someapp / somemodel / add /? Name = bar

Теперь, если вам нужно похожее поведение в форме изменений, переопределите метод get_object следующим образом:

def get_object(self, request, object_id):
    obj = super(YourModelAdmin, self).get_object(request, object_id)
    for key, value in request.GET.items():
        setattr(obj, key, value)
    return obj

Теперь откройте / admin / someapp / somemodel / 1 /? Name = bar, и поле "name" будет иметь значение "bar" в форме.

Это проверено взломать .

...