如何检查记录是否成功保存在Django中



你能看看下面的代码吗?

表单似乎已成功提交并验证。然而,它似乎没有保存到我的数据库中。请在下面的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将抛出一个异常。你不必担心,但你可以尝试执行一个过滤请求,看看对象是否已经创建。(但不推荐使用。这会导致额外的数据库命中(

最新更新