你能看看下面的這段代碼嗎?
似乎表單已成功提交并驗證。但是,它似乎沒有保存到我的資料庫中。請在下面以##### 開頭的 post() 方法中查看我的評論。我知道在 PHP 中可以 print_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})
uj5u.com熱心網友回復:
我知道問題出在哪里。如果您嘗試從 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})
uj5u.com熱心網友回復:
只需檢查 new_record 是否有 id:
created = new_record.id
例如:
if not created:
raise # or other stuff
uj5u.com熱心網友回復:
如果保存.save()失敗。Django 會拋出例外。你不應該擔心它。但是您可以嘗試執行過濾請求并查看是否創建了物件。(但不建議這樣做。它會導致額外的資料庫命中)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/454484.html
