Python django views.py中的save方法在模型py中重写后不起作用
这是views.py文件中的my home函数,如果有人对我的博客文章发表评论,我将尝试更新各个博客上的评论数。 之前一切正常,但后来我在models.py中添加了save方法,从那时起,即使我从管理面板更改博客的关键字并尝试保存它,它也会保存但不更新关键字,并保留上一个关键字。 [我打印了每个博客及其各自的评论,他们正在打印正确的结果 假设我的博客1有2条评论,有人添加了新评论,我得到3条作为博客1的评论计数] 有人能告诉我是什么问题并帮我解决吗Python django views.py中的save方法在模型py中重写后不起作用,python,django,django-models,django-views,save,Python,Django,Django Models,Django Views,Save,这是views.py文件中的my home函数,如果有人对我的博客文章发表评论,我将尝试更新各个博客上的评论数。 之前一切正常,但后来我在models.py中添加了save方法,从那时起,即使我从管理面板更改博客的关键字并尝试保存它,它也会保存但不更新关键字,并保留上一个关键字。 [我打印了每个博客及其各自的评论,他们正在打印正确的结果 假设我的博客1有2条评论,有人添加了新评论,我得到3条作为博客1的评论计数] 有人能告诉我是什么问题并帮我解决吗 def home(request):
def home(request):
all_blogs = Blog.objects.all()
for b in all_blogs:
comment_per_blog = Comment.objects.filter(blog=b.id, active=True).count()
print(f"blog {b.id} has {comment_per_blog} comment")
b.blog_comments = comment_per_blog
b.save()
这是models.py文件中的我的博客模型
class Blog(models.Model):
objects = models.Manager()
slug = models.SlugField(default="", null=True, blank=True, max_length=255)
keywords = models.CharField(max_length=500, default="", null=True, blank=True)
title = models.CharField(max_length=500)
main_image = models.ImageField(upload_to='Blog', null=True, blank=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
body = RichTextUploadingField(null=True, blank=True)
tags = models.CharField(max_length=255)
author = models.ForeignKey(User, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
likes = models.IntegerField(default=0)
blog_comments = models.IntegerField(default=0)
active = models.BooleanField(default=True)
def save(self, *args, **kwargs):
if self.slug is None:
year = datetime.today().year
self.slug = slugify(str(year) + '-' + str(self.category) + '-' + str(self.title))
super(Blog, self).save(*args, **kwargs)
def __str__(self):
return self.title
我的评论类,这个类存储每个博客的评论
class Comment(models.Model):
blog = models.ForeignKey(Blog,on_delete=models.CASCADE,related_name='comments')
name = models.CharField(max_length=80)
email = models.EmailField()
body = models.TextField()
created_on = models.DateTimeField(default=datetime.now())
active = models.BooleanField(default=True)
class Meta:
ordering = ['created_on']
verbose_name = 'Blogs Comment'
verbose_name_plural = 'Blogs Comment'
def __str__(self):
return ' {} by {}'.format(self.body, self.name)
self.slug有
default=“
所以在保存方法中它不会进入条件,所以super不起作用,我建议修改保存方法:
def save(self, *args, **kwargs):
if self.slug is None or self.slug == "":
year = datetime.today().year
self.slug = slugify(str(year) + '-' + str(self.category) + '-' + str(self.title))
super(Blog, self).save(*args, **kwargs)
如果self.slug为None:
如果此条件为true,则仅调用超级保存方法。如果条件为false,则不保存它…那么我应该在其他部分添加什么,先生?只是超级方法和save()起作用了!谢谢你,我不知道我怎么会犯这样的错误(感到尴尬*)。