你能看看下面的代码吗?
表单似乎已成功提交并验证。然而,它似乎没有保存到我的数据库中。请在下面的post((方法中查看我的评论,以#####开头。我知道在PHP中可以打印_r($var(;出口但在Python/Django中似乎找不到等价的。
class ReportListView(ListView):
model = ReportList
form_class = ReportListForm
initial = {}
context_object_name = 'reportlists'
template_name = "reports.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
#context['now'] = timezone.now()
return context
def get_queryset(self):
return ReportList.objects.filter(user=self.request.user)
def get(self, request, *args, **kwargs):
form = self.form_class(initial=self.initial)
return render(request, self.template_name, {'form': form})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
# process form cleaned data
# name = form.cleaned_data.get('name') # .lower()
new_report = form.save(commit=False)
new_report.user = self.request.user
new_report.save()
### what can I write to check if new report has been saved?
### also, how can I print something here to print that in the browser e.g.
### print(datavariable)
### exit() ?? or something to stop execution here so that I read previous print output
return redirect('report')
return render(request, self.template_name, {'form': form})
您只需检查new_record是否具有id:
created = new_record.id
例如:
if not created:
raise # or other stuff
我知道问题出在哪里。如果你试图从get_context_data((或get_queryset((打印任何内容,它都会失败,因为你在get((方法中指定了上下文。因此,不会同时调用get_context_data((和get_queryset((。在您的情况下,您想做的是修改您的get((方法,并去掉我提到的两个前面的方法,所以您在get((中的代码看起来是这样的:
def get(self, request, *args, **kwargs):
form = self.form_class(initial=self.initial)
reportlists = ReportList.objects.filter(user=self.request.user)
return render(request, self.template_name, {'form': form, 'reportlists': reportlists}})
重写get((和post((最终会成为模板内容的来源。现在,我在get((方法中定义了报告列表,并通过上下文将其发送到模板,这样就可以在模板本身的名称reportlists
下访问它。整个代码现在可能看起来像这样:
class ReportListView(ListView):
model = ReportList
form_class = ReportListForm
initial = {}
template_name = "reports.html"
def get(self, request, *args, **kwargs):
form = self.form_class(initial=self.initial)
reportlists = ReportList.objects.filter(user=self.request.user)
return render(request, self.template_name, {'form': form, 'reportlists': reportlists})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
# process form cleaned data
# name = form.cleaned_data.get('name') # .lower()
new_report = form.save(commit=False)
new_report.user = self.request.user
new_report.save()
return redirect('report')
return render(request, self.template_name, {'form': form})
如果保存.save()
失败。Django将抛出一个异常。你不必担心,但你可以尝试执行一个过滤请求,看看对象是否已经创建。(但不推荐使用。这会导致额外的数据库命中(