2014-10-14 3 views
0

Как сохранить набор форм с помощью request.user? Кажется, я не могу получить форму для сохранения объекта request.user при сохранении при использовании Django Formsets.Сохранение форм с помощью request.user

forms.py

class CreditOptionsForm(forms.ModelForm): 
    crew_position = forms.ModelChoiceField(CrewPosition.objects.all(), 
     widget=autocomplete_light.ChoiceWidget('CrewPositionAutocomplete'), required=False) 

    class Meta: 
     model = CreditOptions 
     exclude = ('user',) 

OptionFormset = formset_factory(CreditOptionsForm, extra=3) 

models.py

class CrewPosition(models.Model): 
    name = models.CharField(max_length=150) 

    def __unicode__(self): 
     return self.name 


class CreditOptions(models.Model): 
    year = models.IntegerField(max_length=4, help_text='e.g. 1995', null=True, blank=True) 
    project_name = models.CharField(max_length=150, null=True, blank=True) 
    crew_position = models.ForeignKey(CrewPosition, null=True, blank=True) 
    user = models.ForeignKey(User, null=True, blank=True) 

views.py

from .forms import CreditForm, SkillsForm, OptionFormset 

@login_required(login_url='/') 
def add_skills(request, template_name): 
    user = request.user 
    formset = OptionFormset(user=user) 
    if request.method == 'POST': 
     formset = OptionFormset(request.POST, user=user) 
     if formset.is_valid(): 
      for form in formset.forms: 
       form.save() 
      messages.success(request, "Successfully created your profile.") 
      return redirect(urlresolvers.reverse('skills')) 
    return render(request, template_name, { 
     'formset': formset 
    }) 

Когда я сохраняю, пользователь никогда не будет сохранен. Я пробовал в своей петле:

form.save(commit=False) 
form.user = user 
form.save() 

Но это не спасает пользователя.

ответ

1

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

@login_required(login_url='/') 
def add_skills(request, template_name): 
    user = request.user 
    formset = OptionFormset() 
    if request.method == 'POST': 
     formset = OptionFormset(request.POST) 
     if formset.is_valid(): 
      for form in formset.forms: 
       f = form.save(commit=False) 
       f.user = user 
       f.save() 
      messages.success(request, "Successfully created your profile.") 
      return redirect(urlresolvers.reverse('skills')) 
    return render(request, template_name, { 
     'formset': formset 
    }) 

Также form.save(commit=False) возвращает объект модели. Поэтому вы должны назначить user этому полю возвращенного объекта user.

+0

Woops, это была моя ошибка, спасибо! – JeffC

+1

добро пожаловать. – sha256

Смежные вопросы