하루 종일이 작업을하려고했습니다. 나는 입구 인 주 모형을 가지고있다. 엔트리는 몇 가지 교대를 포함 할 수 있습니다. 이것은 근무 시간을 저장하는 앱의 일부입니다. 나는 그 말을 종료한다 변화를 눌러 저장과 항목을 입력 할 때Formset : 모델 저장이 작동하지 않습니다.
class EntryCreateView(FormView):
template_name = 'entry/create.html'
form_class = AddWorkDay
success_url = reverse_lazy('time_manager:index')
def get(self, request, ordinal=None, *args, **kwargs):
""" Initiates with a blank form or will populate the day field with the day represented by the passed
ordinal. """
if ordinal:
day = datetime.datetime.fromordinal(int(ordinal))
form = AddWorkDay(initial={'day': day})
else:
form = AddWorkDay()
formset = ShiftFormSet()
return render(request, self.template_name, {'form': form, 'formset': formset})
def post(self, request, ordinal=None, *args, **kwargs):
form = AddWorkDay(data=request.POST)
formset = ShiftFormSet(data=request.POST)
errors = []
shifts = []
if form.is_valid() and formset.is_valid():
# Build entry.
entry = form.save(commit=False)
entry.owner = request.user
errors.extend(entry.validate(request.user))
# Build shift.
for form in formset:
shift = form.save(commit=False)
shift.entry = entry
shifts.append(shift)
errors.extend(shift.validate(request.user))
if len(errors) == 0:
entry.save()
for shift in shifts:
shift.save()
return HttpResponseRedirect(reverse('time_manager:index'))
return render(request, self.template_name, {'form': form, 'formset': formset, 'errors': errors, 'shifts': shifts, 'entry': entry})
: 여기에 항목을 생성하는 뷰입니다/time_manager/항목에서 "IntegrityError가// NOT NULL 제약 조건이 실패 만들 : shift_shift.entry_id ". 나는 교대가 잘못되었는지 알아 내려고 노력했기 때문에, 블록을 어디에 저장했는지 ("ifen (오류)"에서 "HttpResponseRedirect를 반환한다"), 폼이있는 뷰로 돌아갈 것이라고 주석을 달았습니다. . 그런 다음 {{shifts}}을 내 템플릿에 넣어 거기에 무엇이 있는지 확인합니다. "noReverseMatch at/time_manager/entry/create/ '()'및 키워드 인수 '{'pk ': 없음}'을 (를) 사용하여 '편집'을 취소합니다.)는 { 'url %} 태그를 사용하여 존재하지 않는 뷰를 참조하는 것처럼 ['time_manager/entry/shift/edit/(? P (\ d +))/$ '] 시도했습니다. 그래서 formset의 형식을 저장하려고 할 때 뭔가 잘못되었다고 생각합니다. 그러나, 나는 django 문서를 몇번이고 읽었고 이것은 formset의 형식을 저장하는 방법이다. 그렇지 않은가?
저장을 주석 처리 했으므로 개체가 저장되지 않으므로 pk가 null이됩니다. –
저장 부분이 주석 처리되지 않은 경우 null 제약 조건이 발생합니다. 나는 단지 그것을 주석 처리 했으므로 폼보기로 돌아가서 변수의 내용을 표시 할 수있었습니다. 그러나 shift의 내용을 인쇄하려고하면보기가 종료됩니다. – user2660930
url 태그를 사용하는 곳에 템플릿을 표시해야합니다. –