Django formset establece el usuario actual

Relacionado conesta pregunt, pero expandiéndolo - ¿Cómo usaría esta técnica en un conjunto de formularios?

Me gustaría usar el usuario conectado actualmente en un formulario, pero estoy usando el formulario en un conjunto de formularios. La solución referenciada para un solo formulario es pasar request.user al formulario y procesar en init. ¿Cómo agrego a los kwargs para cada formulario en el conjunto de formularios?

Ejemplo en mi código:

in forms.py

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

then en 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

then en 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>')

Respuestas a la pregunta(5)

Su respuesta a la pregunta