Согласно исходному коду (и быстрому тесту), Django поддерживает использование параметров GET в качестве начальных значений для моделей моделей в админке. Он даже поддерживает отношения «многие ко многим».
Вы пробовали это? Может быть, это пропущенная косая черта в конце URL.
admin/foo/bar/add?name=Foobar
Вероятно, перенаправляется на ...
admin/foo/bar/add/
... таким образом отбрасывая строку запроса. Поэтому попробуйте добавить туда косую черту и посмотреть, работает ли она.
admin/foo/bar/add/?name={{ person }}
Обновление (предварительное заполнение логических полей)
На случай, если у кого-то еще возникнут проблемы с предварительным заполнением логических полей:
Если вы передаете какое-либо значение в строку запроса, например, admin/foo/bar/add/?is_active=foo
, это заполнит поле is_active
значением True (поскольку любая непустая строка является истинным значением). Поэтому, если вы хотите снять флажок для данного поля, вообще не передавайте значение, например admin/foo/bar/add/?is_active=
Это фрагмент кода из метода add_view
в ModelAdmin
, отвечающий за использование параметров GET в качестве начальных значений.
http://code.djangoproject.com/browser/django/trunk/django/contrib/admin/options.py#L878
# Prepare the dict of initial data from the request.
# We have to special-case M2Ms as a list of comma-separated PKs.
initial = dict(request.GET.items())
for k in initial:
try:
f = opts.get_field(k)
except models.FieldDoesNotExist:
continue
if isinstance(f, models.ManyToManyField):
initial[k] = initial[k].split(",")
form = ModelForm(initial=initial)