InLineFormSet을 사용하여 특정 작업 표와 관련된 모든 레코드를 표시했습니다. 사용자는 페이지에 많은 새로운 양식을 추가 할 수 있습니다. 아약스와 html을 사용하여 아래쪽의 빈 existing_form에 새 ID를 추가했습니다. 그러나 이것을 저장하는 것은 문제입니다. 새로 추가 된 양식에는 timesheet_id가 아직 할당되지 않았기 때문에 existing_forms의 일부로 저장하지 않습니다.InLineFormSet에 init 메서드 추가
폼을 생성 할 때 init 메서드를 함께 사용하여이 문제를 해결하려고합니다. (?)
1) 레코드가 existing_formset의 일부가되기 전에 레코드를 저장해야합니까?
2) TimeForm_id를 TimeForm에서 제외했습니다 .... 이것은 form.timesheet_id = var가 작동하지 않는다는 것을 의미하며 ... obj.timesheet_id를 사용해야합니다 ...하지만이 작업을 수행 할 수 있습니까? 폼의 초기화에서 ?? 매우 혼란.
3) ..... 쉽게 새로 추가 된 형태와 사용 modelformset_factory에 대한 새의 formset을 사용할 수 있나요
보기 : 나는 두 개의 별도의 formsets에서를 사용하여이 접근 한
class CustomInlineFormSet(BaseInlineFormSet):
def clean(self):
super(CustomInlineFormSet, self).clean()
timesheet = TimeSheet.objects.get(pk=timesheet_id)
for form in self.forms:
form.empty_permitted = True
def __init__(self, request, *args, **kwargs):
super(CustomInlineFormSet, self).__init__(*args,**kwargs)
# the following won't work because it's excluded from the form?
# self.fields['timesheet_id'] = forms....... oh no
timesheet_fromview = request.session.get('timesheet')
print timesheet_fromview
for form in self.forms:
obj = form.save(commit=False)
obj.timesheet_id = timesheet_fromview
try:
del request.session['timesheet']
print "session deleted"
except KeyError:
pass
print "Key error raised"
def timesheet(request, timesheet_id):
timesheet = TimeSheet.objects.get(pk=timesheet_id)
TimeInlineFormSet = inlineformset_factory(TimeSheet, Time, exclude=('timesheet_id',), extra=0, formset=CustomInlineFormSet)
if request.method == 'POST':
# instance is not yet timesheet.... no foreign key in new fields so doesn't do anything
existing_formset = TimeInlineFormSet(request.POST, request.FILES, instance=timesheet)
for thetime in existing_formset.forms:
# obj = thetime.save(commit=False)
# obj.timesheet_id = timesheet
# obj.save()
# print obj
if thetime.is_valid():
print "existing time is valid"
thetime.save()
else:
"existing time is not valid"
context = {
"timesheet": timesheet,
"existing_formset": existing_formset,
}
return render(request, 'tande/timesheet.html', context)
else:
print "method is not post"
existing_formset = TimeInlineFormSet(instance=timesheet)
new_timeformset = NewTimeFormSet()
request.session['timesheet'] = timesheet
context = {
"timesheet": timesheet,
"existing_formset": existing_formset,
}
return render(request, 'tande/timesheet.html', context)