Django: Как установить начальные значения для поля в наборе форм встроенной модели? - PullRequest
7 голосов
/ 30 сентября 2009

У меня есть то, что я считаю простой проблемой. У меня есть встроенный набор форм модели, и я бы хотел, чтобы в поле выбора было выбрано значение по умолчанию для текущего пользователя, вошедшего в систему. По моему мнению, я использую промежуточное ПО аутентификации Django, поэтому получить пользователя - это просто получить доступ к request.user.

Однако я не смог понять, как установить этого пользователя в качестве выбранного по умолчанию значения в поле выбора (ModelChoiceField), содержащем список пользователей. Кто-нибудь может мне с этим помочь?

Ответы [ 3 ]

4 голосов
/ 22 ноября 2011

Это делает трюк. Он работает, устанавливая начальные значения всех «дополнительных» форм.

formset = MyFormset(instance=myinstance)
user = request.user
for form in formset.forms:
    if 'user' not in form.initial:
        form.initial['user'] = user.pk
4 голосов
/ 01 октября 2009

Я не уверен, как справиться с этим во встроенных наборах форм, но следующий подход будет работать для обычных форм и моделей форм:

Вы не можете установить это как часть определения модели, но вы можете установить его во время инициализации формы:

def __init__(self, logged_in_user, *args, **kwargs):
    super(self.__class__, self).__init__(*args, **kwargs)
    self.fields['my_user_field'].initial = logged_in_user

...

form = MyForm(request.user)
0 голосов
/ 28 июня 2015

Я использую идею Руне Каагарда, приведенную выше, за исключением того, что заметил, что formsets предоставляют свойство extra_forms: django.forms.formsets code

@property
def extra_forms(self):
    """Return a list of all the extra forms in this formset."""
    return self.forms[self.initial_form_count():]

Итак, придерживаясь приведенного выше примера:

formset = MyFormset(instance=myinstance)
user = request.user
for form in formset.extra_forms:
    form.initial['user'] = user.pk

Избавляет от необходимости проверять любые начальные формы, просто укажите дополнительные формы по умолчанию.

...