[英]Can't save data when posting form in Django
我正在按照Django教程構建一個小站點,你可以在站點中添加頁面和類別,我定義了一個Page模型如下:
class Page(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)
title = models.CharField(max_length=128)
url = models.URLField()
views = models.IntegerField(default=0)
def __str__(self):
return self.title
並定義了如下的模型:
class PageForm(forms.ModelForm):
title = forms.CharField(max_length=128, help_text="Please enter the title of this page")
url = forms.URLField(max_length=200, help_text="Please enter the URL of the page")
views = forms.IntegerField(widget=forms.HiddenInput(),initial=0)
category = forms.ModelChoiceField(queryset=Category.objects.all(),help_text="Please choose a category for the page")
class Meta:
model = Page
fields = '__all__'
和add_page的視圖是:
def add_page(request):
if request.method == 'POST':
form = PageForm(request.POST)
if form.is_valid():
page = form.save(commit=True)
print(page)
page.views = 0
page.save()
return index(request)
else:
print('error')
form.errors
else:
form = PageForm()
context_dict = {'form':form}
return render(request,'rango/add_page.html',context_dict)
但是當我運行網站並在現場填寫這樣的信息時:
並選擇“創建頁面”但單擊按鈕后沒有響應也沒有將表單中的數據添加到數據庫中,我嘗試使用print進行調試,發現數據無法通過驗證哪個沒有進程if塊'form.is_valid()'但我無法理解為什么以及如何修改。
我的類別模型定義為:
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
views = models.IntegerField(default=0)
likes = models.IntegerField(default=0)
slug = models.SlugField(unique=True)
def save(self,*args,**kwargs):
self.slug = slugify(self.name)
super(Category, self).save(*args,**kwargs)
def __str__(self):
return self.name
類別形式:
class CategoryForm(forms.ModelForm):
name = forms.CharField(max_length=128, help_text="Please enter the category name.")
views = forms.IntegerField(widget=forms.HiddenInput(),initial=0)
likes = forms.IntegerField(widget=forms.HiddenInput(),initial=0)
slug = forms.CharField(widget=forms.HiddenInput(),required=False)
class Meta:
model = Category
fields = ('name',)
而不是像你在這里設置初始
views = forms.IntegerField(widget=forms.HiddenInput(),initial=0)
只需使用它
views = forms.IntegerField(widget=forms.HiddenInput())
然后改變這個
form = PageForm(request.POST)
對此
form = PageForm(request.POST, initial={"views": "0"})
我指的是這篇文章 。
只需在PageForm中排除字段'category',重啟服務器即可。
改變你的觀點,
def add_page(request):
if request.method == 'POST':
form = PageForm(request.POST)
if form.is_valid():
page = form.save(commit=False)
page.views = 0
page.save()
return redirect('index')
else:
render(request, 'rango/add_page.html', {'form':'form.errors'}
else:
form = PageForm()
context_dict = {'form':form}
return render(request,'rango/add_page.html',context_dict)
在保存表單時,您應該將commit=False
用於添加其他數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.