无法使视图计数器



我正在尝试在我的django博客中创建一个视图计数器。他们是项目中的 3 个应用程序。写作应用程序上的视图计数器工作正常,但在博客应用程序上,它会抛出错误'NoneType' object has no attribute 'views'并在post.views+=1处显示错误。但是,相同的代码在写作应用程序中有效。我找不到问题出在哪里。也许代码返回一个空集,这就是它不起作用的原因,但如果是这样,那么为什么当我只删除这个视图计数器代码时代码会起作用?

以下是博客和写作应用的代码片段。博客应用程序 Views.py:-

post = Post.objects.filter(slug=slug).first()
post.views +=1
post.save()
tech = Tech.objects.filter(slug=slug).first()
tech.views +=1
tech.save()
pcomments = BlogComment.objects.filter(post=post,parent=None)
preplies = BlogComment.objects.filter(post=post).exclude(parent=None)
#Creating Reply Dictionary and iterating it 
preplyDict = {}
for reply in preplies:
if reply.parent.sno not in preplyDict.keys():
preplyDict[reply.parent.sno] = [reply]
else:
preplyDict[reply.parent.sno].append(reply)
tcomments = BlogComment.objects.filter(tech=tech,parent=None)
treplies = BlogComment.objects.filter(tech=tech).exclude(parent=None)
#Creating Reply Dictionary and iterating it 
treplyDict = {}
for reply in treplies:
if reply.parent.sno not in treplyDict.keys():
treplyDict[reply.parent.sno] = [reply]
else:
treplyDict[reply.parent.sno].append(reply)
context = {'post': post,'tech': tech,'pcomments':pcomments,'tcomments':tcomments,'preplyDict':preplyDict,'treplyDict':treplyDict}
return render(request,'blog/blogPost.html',context)

著作 views.py:-

def wPost(request,slug):
w = Writing.objects.filter(slug=slug).first()
w.views = w.views+1
w.save()
comments = WComment.objects.filter(wpost=w, parent=None)
replies = WComment.objects.filter(wpost=w).exclude(parent=None)
#Creating Reply Dictionary and iterating it 
replyDict = {}
for reply in replies:
if reply.parent.sno not in replyDict.keys():
replyDict[reply.parent.sno] = [reply]
else:
replyDict[reply.parent.sno].append(reply)
context = {'writings': w,'comments': comments,'user' : request.user,'replyDict' : replyDict}
return render(request,'writings/wPost.html', context)

博客 Models.py:-

class Post(models.Model):
sno= models.AutoField(primary_key=True)
title = models.CharField(max_length=200)
content = models.TextField()
views = models.IntegerField(default=0)
category = models.CharField(max_length=13)
author = models.CharField(max_length=100)
slug = models.CharField(max_length=150,default=" ")
timeStamp = models.DateTimeField(blank=True)
img = models.ImageField(upload_to="blog/", blank=True)
img2 = models.ImageField(upload_to="blog/", blank=True)
img3 = models.ImageField(upload_to="blog/", blank=True)
img4 = models.ImageField(upload_to="blog/", blank=True)
img5 = models.ImageField(upload_to="blog/", blank=True)
img6 = models.ImageField(upload_to="blog/", blank=True)
def __str__(self):
return self.title + ' by ' + self.author
class Tech(models.Model):
sno= models.AutoField(primary_key=True)
title = models.CharField(max_length=200)
content = models.TextField()
views = models.IntegerField(default=0)
category = models.CharField(max_length=13)
author = models.CharField(max_length=100)
slug = models.CharField(max_length=150,default=" ")
timeStamp = models.DateTimeField(blank=True)
img = models.ImageField(upload_to="blog/", blank=True)
def __str__(self):
return self.title + ' by ' + self.author

写作 Models.py

class Writing(models.Model):
sno= models.AutoField(primary_key=True)
title = models.CharField(max_length=200)
content = models.TextField()
views = models.IntegerField(default=0)
category = models.CharField(max_length=13)
author = models.CharField(max_length=100)
slug = models.CharField(max_length=150,default=" ")
timeStamp = models.DateTimeField(blank=True)
img = models.ImageField(upload_to="writings/", blank=True)
def __str__(self):
return self.title + ' by ' + self.author

博客 admin.py:-

admin.site.register(BlogComment)
#Add this media to the post while registering it.
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
class Media:
js = ("tinyinject.js",)
@admin.register(Tech)
class TechAdmin(admin.ModelAdmin):
class Media:
js = ("tinyinject.js",)

著作 admin.py:-

admin.site.register(WComment)
@admin.register(Writing)
class WriteAdmin(admin.ModelAdmin):
class Media:
js = ("tinyinject.js",)

错误星迹:-

None
Internal Server Error: /blog/learning-python
Traceback (most recent call last):
File "/home/skyrunner/django_blog/mendlife/blogenv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/home/skyrunner/django_blog/mendlife/blogenv/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/skyrunner/django_blog/mendlife/blogenv/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/skyrunner/django_blog/mendlife/blog/views.py", line 18, in blogPost
post.views+=1
AttributeError: 'NoneType' object has no attribute 'views'

所以在浪费了几个小时之后,我意识到我在那里犯了一个非常愚蠢的错误。由于我使用两个模型,因此我只需要使用 If 语句即可。所以我添加了这个,它按预期工作

if post is None:
tech.views +=1
tech.save()
else:
post.views+=1
post.save()

感谢大家的评论和反馈!

最新更新