一整天都在努力工作。我有一个主要的模式是入门。一个条目可以包括几个班次。这是应用程序商店工作时间的一部分。以下是创建条目的视图:
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})
当我试图用shift键输入一个条目并按save时,它会终止并显示: “IntegrityError at/time_manager/entry/create/ NOT NULL约束失败:shift_班次输入\u id". 我试图找出移位的错误,所以我注释了保存移位的块(从“if len(errors)”到“return HttpResponseRedirect.”),这样它就可以返回到表单中的视图了。然后我将{{shifts}}放入我的模板中,看看里面有什么。当我这样做时,它以“NoReverseMatch at/time\u manager/entry/create”结束/ 反转“edit”的参数“()”和关键字参数“{'pk”:未找到“}”。尝试了1个模式:['time_manager/entry/shift/edit/(?P(\d+)/$']”就好像我试图使用{%url%}标记引用一个不存在的视图。所以我猜我试图保存表单集的表单时出了问题。但是,我一遍又一遍地阅读django文档,这就是存储表单集表单的方法,不是吗?在
好吧,带着一个全新的头脑,我看了看我的代码,然后我想到了。我想先确保条目和每个班次都是正确构建的,然后只有在它们不违反任何规则的情况下才保存它们。正如您在上面看到的:我用commit=False保存这两者。但这意味着条目还没有被分配主键。主键是我的shift模型上的ForeignKeyField需要什么。这就是Django未能保存它的原因。
我稍微改变了方法的顺序。工作代码如下:
请注意第二次保存条目(withoutcommit=False),然后将其分配给shift。在
相关问题 更多 >
编程相关推荐