У объекта 'QuerySet' нет атрибута 'comments'

при запуске http://127.0.0.1:8000/blogapp/blogdata/53/ возникает ошибка AttributeError at /blogapp/blogdata/53/ Объект 'QuerySet' не имеет атрибута 'comments' и он говорит, что ожидаемое место ошибки - views.py строка 42, которая

comments=blogmodel.comments.all()

models.py

class Blogmodel(models.Model):
    author=models.ForeignKey(User,on_delete=models.CASCADE,blank=True,null=True)
    title=models.CharField(max_length=200)
    Newpost=models.TextField(max_length=1000)
    summary=models.TextField(max_length=50,blank=True)
    created_date=models.DateTimeField(auto_now_add=True)
    published_date=models.DateTimeField(auto_now=True)
    def __str__(self):
        return f'{self.title},{self.Newpost},{self.published_date},{self.created_date}'

class commentmodel(models.Model):
    blogmodel=models.ForeignKey(Blogmodel,related_name='comments' ,on_delete=models.CASCADE,blank=True,null=True)
    comment=models.CharField(max_length=200)
    active=models.BooleanField(default=True)
    def __str__(self):
        return f'{self.comment},{self.blogmodel.title}'

views.py

def blogretrieve(request):
   blogmodel=Blogmodel.objects.all().order_by('-published_date')
   context={'blogmodel':blogmodel,}
   return render(request,'blogapp/blogretrieve.html',context)

def blog(request,pk):
    blogmodel=Blogmodel.objects.filter(id=pk)
    #comments = y.comments.filter(active=True)
    comments=blogmodel.comments.all()        #line 42 
    context={'blogmodel':blogmodel,'comments':comments}
    return render(request,'blogapp/blogpk.html',context)

urls.py app_name='blogapp'

urlpatterns=[
    path('',views.home,name='home'),
    path('createblog/',views.blogview,name='blogview'),
    path('blog/',views.blogretrieve,name='blog'),
    path('signup/',views.signupview,name='signup'),
    path('login/',views.loginview,name='login'),
    path('logout/',views.logoutview,name='logout'),
    path('author/<str:pk>/',views.authorview,name='author'),
    path('blogdata/<str:pk>/',views.blog,name='blogdata'),

You should retrieve a single item with .get(…) [Django-doc], or even better, with get_or_404(…) [Django-doc]:

from django.shortcuts import get_object_or_404

def blog(request, pk):
    blog = get_or_404(Blogmodel, pk=pk)
    comments = blog.comments.filter(active=True)
    context = {'blog': blog, 'comments':comments}
    return render(request, 'blogapp/blogpk.html', context)

Примечание: Модели обычно не имеют суффикса Model. Поэтому лучше переименовать BlogModel в Blog.

Вернуться на верх