Django Formset:在每个表单实例中传递一个参数

时间:2013-12-05 21:29:35

标签: python django

在我的表单集中,用户可以在每个表单上选择,投影,小时数和日期。

发送给db的'user'参数应该是经过身份验证的用户的名称(我的身份验证系统工作正常)

我不确定如何将此参数(用户)传递到表单集中,因此它会自动提交到表单的每个实例上的USER列。

我已经给了RTFM 3个小时,所以我转到这里。

views.py

def add_hours(request):

    context = RequestContext(request)

    HourFormSet = modelformset_factory(Hour, extra=5)



    if request.method == 'POST':
        formset = HourFormSet(request.POST)

        formset.save(commit=True)

        return index(request)

    else:
        formset = HourFormSet(queryset=Hour.objects.none())


    context_dict = {'formset': formset}


    return render_to_response('add_hours.html', context_dict, context)

models.py

class Hour(models.Model):
    user = models.ForeignKey(User, help_text = 'Enter your name')
    hour = models.IntegerField(default=0, help_text = 'How many hours?')
    date = models.DateField(help_text = 'Date (MM/DD/YY)')
    project = models.ForeignKey(Project, help_text = 'Select the project')

    def __unicode__(self):
        return str(self.user) + ' ' + str(self.date)
    def project_name(self):
        return self.project.name

1 个答案:

答案 0 :(得分:4)

首先,请确保您不在表单中包含用户:

HourFormSet = modelformset_factory(Hour, extra=5, exclude=('user',))

然后,在保存实例之前添加用户:

if request.method == 'POST':
    formset = HourFormSet(request.POST)

    if formset.is_valid():
        instances = formset.save(commit=False)  # This will return unsaved Hour objects
        for instance in instances:
            instance.user = request.user        # Add the logged in user
            instance.save()
        return index(request)

formset = HourFormSet(queryset=Hour.objects.none())
context_dict = {'formset': formset}
return render_to_response('add_hours.html', context_dict, context)