在我的表单集中,用户可以在每个表单上选择,投影,小时数和日期。
发送给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
答案 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)