Лично мне нравится второй ответ о динамическом построении класса формы в функции, потому что это очень быстро реализовать и легко понять.

ится кэтот вопрос, но подробно об этом - Как бы я использовал эту технику в форме?

Я хотел бы использовать текущего зарегистрированного пользователя в форме, но я использую форму в наборе форм. Ссылочное решение для одной формы - передать request.user в форму и обработать ее в init. Как добавить к kwargs для каждой формы в formset?

Пример в моем коде:

в forms.py

class NewStudentForm (forms.Form):
    username = forms.RegexField(label=_("Username"), max_length=30, regex=r'^\w+

тогда в views.py

@login_required
def new_student(request):
    from django.forms.formsets import formset_factory
    try:
        if request.method == 'GET':
            newStudentFormset = formset_factory(forms.NewStudentForm, extra=2)
            formset = newStudentFormset()
            return shortcuts.render_to_response('NewStudent.html', { 'newStudentFormSet':formset, 'active_username': request.user.username })
        elif request.method == 'POST':
            if LOGIN_FORM_KEY in request.POST:
                return _handle_login(request)
            data = request.POST.copy()
            newStudentFormset = formset_factory(forms.NewStudentForm)
            formset = newStudentFormset(data) ### Pass current user to formset? ###
            if formset.is_valid():
                formset.save()
                request.user.message_set.create(message="Save successful.")
                return shortcuts.redirect(student)
            else:
                return shortcuts.render_to_response('NewStudent.html', { 'newStudentFormSet':formset, 'active_username': request.user.username, 'error_message':formset.errors})
        return http.HttpResponseNotAllowed(['GET', 'POST'])
    except models.Student.DoesNotExist:
        return http.HttpResponseNotFound('<h1>Requested Student not found</h1>')
, help_text = _("Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."), error_message = _("This value must contain only letters, numbers and underscores.")) first_name = forms.CharField(label=_('first name'), max_length=30 ) last_name = forms.CharField(label=_('last name'), max_length=30, ) email = forms.EmailField(label=_('e-mail address') ) password = forms.CharField(label=_('password'), max_length=64, ) class Meta: model = User fields = ("username","first_name", "last_name", "email", "password") def __init__(self, *args, **kwargs): self._user = kwargs.pop('user') super(NewStudentForm, self).__init__(*args, **kwargs) def save(self, commit=True): user = super(NewStudentForm, self).save(commit=False) user.set_password(self.cleaned_data["password"]) if commit: user.save() profile = Profile.objects.create_profile(user) profile.activiation_key = profile.ACTIVATED_KEY profile.authorized = True profile.save() user.is_active=True user.save() student = models.Student() student.user = user student.teacher = self._user student.plaintext_pwd = self.cleaned_data["password"] student.save() return UserWarning

тогда в views.py

@login_required
def new_student(request):
    from django.forms.formsets import formset_factory
    try:
        if request.method == 'GET':
            newStudentFormset = formset_factory(forms.NewStudentForm, extra=2)
            formset = newStudentFormset()
            return shortcuts.render_to_response('NewStudent.html', { 'newStudentFormSet':formset, 'active_username': request.user.username })
        elif request.method == 'POST':
            if LOGIN_FORM_KEY in request.POST:
                return _handle_login(request)
            data = request.POST.copy()
            newStudentFormset = formset_factory(forms.NewStudentForm)
            formset = newStudentFormset(data) ### Pass current user to formset? ###
            if formset.is_valid():
                formset.save()
                request.user.message_set.create(message="Save successful.")
                return shortcuts.redirect(student)
            else:
                return shortcuts.render_to_response('NewStudent.html', { 'newStudentFormSet':formset, 'active_username': request.user.username, 'error_message':formset.errors})
        return http.HttpResponseNotAllowed(['GET', 'POST'])
    except models.Student.DoesNotExist:
        return http.HttpResponseNotFound('<h1>Requested Student not found</h1>')

Ответы на вопрос(5)

Ваш ответ на вопрос