我只是在學習django。2個小時我無法理解錯誤是什么。
模型博客
class Blog(models.Model):
title = models.CharField(max_length=255, verbose_name='Заголовок')
text = RichTextField(verbose_name='Текст')
date = models.DateField(auto_now_add=True, verbose_name='Дата')
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='Автор')
image = models.ImageField(verbose_name='Фото', upload_to='blog')
tags = models.CharField(max_length=500, verbose_name='Теги', help_text='через кому')
slug = AutoSlugField(populate_from='title', null=True)
class Meta:
verbose_name = 'Стаття'
verbose_name_plural = 'Статт?'
def __str__(self):
return self.title
型號注釋
class Comment(models.Model):
name = models.CharField(max_length=100, verbose_name='?м\'я')
email = models.EmailField(verbose_name='Email', max_length=255)
text = models.CharField(max_length=500, verbose_name='Коментар')
datetime = models.DateTimeField(auto_now_add=True)
article = models.ForeignKey(Blog, on_delete=models.CASCADE, verbose_name='Стаття')
parent = models.IntegerField(verbose_name='Батьк?вський коментар')
class Meta:
verbose_name = 'Коментар'
verbose_name_plural = 'Коментар?'
def __str__(self):
return self.name ', ' self.email
模型評論表
class CommentForm(ModelForm):
class Meta:
model = Comment
fields = ['name', 'email', 'text']
widgets = {
'name': TextInput(attrs={'class': 'form-control form--control'}),
'email': TextInput(attrs={'class': 'form-control form--control'}),
'text': Textarea(attrs={'rows': 5, 'class': 'form-control form--control'}),
}
視圖.py
def detail(request, slug):
blog = Blog.objects.get(slug=slug)
if request.method == 'POST':
form = CommentForm(request.POST)
form.article_id = blog.pk
form.parent = 0
if form.is_valid():
form.save()
else:
form = CommentForm()
return render(request, 'blog/blog_detail.html', context={'blog': blog, 'tags': blog.tags.split(','), 'form': form})
而且我不斷收到錯誤訊息-(1048,“列'article_id'不能為空”)。我不明白為什么,因為我賦予它意義。
然而:如何除錯變數?例如,查看表單中的內容。我以前用php編程,有一個var_dump函式。python是模擬的嗎?
uj5u.com熱心網友回復:
我建議您按以下方式更改它,這樣您會更容易理解和除錯我建議您在您希望它停止的行中添加它,它會讓您從控制臺看到該行的所有內容
def post(request, slug):
blog = Blog.objects.get(slug=slug)
form = CommentForm(request.POST, request.FILES)
if form.is_valid():
form_data = form.claned_data
comment = Comment()
comment.article = blog
comment.parent = 0
comment.email = form_data.get('email')
comment.text = form_data.get('text')
comment.name = form_data.get('name')
comment.save()
context={'blog': blog,
'tags': blog.tags.split(','),
'form': form}
return render(request,'blog/blog_detail.html',context)
## for debug
import pdb
pdb.set_trace()
## this for debug do not forget remove line
uj5u.com熱心網友回復:
您應該設定包裝在表單中的 ,所以.article_id:.instance
def detail(request, slug):
blog = Blog.objects.get(slug=slug)
if request.method == 'POST':
form = CommentForm(request.POST, request.FILES)
form.instance.article_id = blog.pk
form.instance.parent = 0
if form.is_valid():
form.save()
else:
form = CommentForm()
return render(request, 'blog/blog_detail.html', context={'blog': blog, 'tags': blog.tags.split(','), 'form': form})
注意:如果 POST 請求成功,您應該制作一個[Django-doc] 來實作Post/Redirect/Get模式 [wiki]。這樣可以避免在用戶重繪 瀏覽器時發出相同的 POST 請求。
redirect
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/453543.html
