Вопрос по django, default-value, django-forms, python – Django: Как установить начальные значения для поля в наборе форм встроенной модели?

7

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

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

Ваш Ответ

3   ответа
4

Это делает трюк. Работает, устанавливая начальные значения всех "экстра» forms.I»

formset = MyFormset(instance=myinstance)
user = request.user
for form in formset.forms:
    if 'user' not in form.initial:
        form.initial['user'] = user.pk
0

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

@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

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

4

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

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

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)
Не уверен, как это будет работать со встроенным набором форм. Я'Я использую inlineformset_factory для создания моего набора форм и передаю ему класс формы, а не экземпляр. Так что я'я не создаю экземпляр объекта формы напрямую и нене знаю как яЯ передам ему этот параметр конструктора. Jeff
Хммм ... я верю, что ModelForms возьмутдефолт' ценность, выигралт они? И стандартные поля формы используют начальные, как вы показываете, но, насколько я знаю, тамнет никаких причин, чтобы пойти супер () на нем. monkut
Это замечательно! Я искал способ отправки данных из формы в представление, чтобы можно было отправлять статус, который будет отображаться с помощью платформы сообщений. В форме я использовал исходное ключевое слово, а затем в представлении я сделал это в validate: cur_key_status = form.cleaned_data ['key_status'] messages.success (request, cur_key_status) radtek

Похожие вопросы