AttributeError:“QuerySet”对象没有属性“标签”

Posted

技术标签:

【中文标题】AttributeError:“QuerySet”对象没有属性“标签”【英文标题】:AttributeError: 'QuerySet' object has no attribute 'tags' 【发布时间】:2020-03-25 02:36:34 【问题描述】:

我的看法。此视图在 news.tags 中包含错误

class NewsDetailView(DetailView):
model = News
template_name='news/detail_news.html'
context_object_name= 'news'


def get_context_data(self, **kwargs):
    news=News.objects.all()
    tags=news.tags.all()
    context = super().get_context_data(**kwargs)
    context['comments'] = Comment.objects.filter(news=self.object)
    context['my_likes'] = Like.objects.filter(news=self.object)
    context['popular_news'] = news.order_by("-count")[:6]
    context['tags'] = tags
    # context["tags"] = TaggableManager().bulk_related_objects(self.object)
    self.object.count = self.object.count + 1
    self.object.save()
    return context

这是我的模型。我创造了这个来制造新闻。我想在没有 TaggableManager() 的情况下在我的新闻中添加标签

class Tag(models.Model):
name = models.CharField(max_length=30)


class News(models.Model):
CATEGORY=(("0","Politics"),("1","Sports"),("2","Health"),("3","Business"),("4","International"),("5","Finance"))
title=models.CharField(max_length=250)
story= models.TextField()
count= models.IntegerField(default=0)
tags = models.ManyToManyField(Tag)
video_url = models.URLField(max_length=270, null=True)  #makemigrations garna baki xa
category= models.CharField(choices=CATEGORY, max_length=2)
slug=models.SlugField(max_length=270,blank=True,null=True)
created_at=models.DateTimeField(auto_now_add=True)
updated_at=models.DateTimeField(auto_now=True)
cover_image=models.ImageField(upload_to="uploads")
author= models.ForeignKey(User, on_delete=models.SET_NULL,null=True)
video_image = models.ImageField(null=True)

def get_absolute_url(self):

    return reverse("detail_news",kwargs="category":self.get_category_display(), "pk":self.pk, "slug":self.slug)

【问题讨论】:

【参考方案1】:

希望对您有所帮助:

def get_context_data(self, **kwargs):
    news=News.objects.all()
    tags=news.tags_set.all() <--edit

【讨论】:

首先,它应该是.tags.all()而不是tags_set.all(),因为模型有tags = models.ManyToManyField(Tag)。接下来,您不能为 news 之类的查询集调用 news.tags.all()。您只能为单个对象调用它。我们在DetailView,因此您可以使用self.objects.tags.all()

以上是关于AttributeError:“QuerySet”对象没有属性“标签”的主要内容,如果未能解决你的问题,请参考以下文章

Django QuerySet 对象没有属性'objects

Django 1.2 等价于 QuerySet.query.as_sql()

检索多对多字段的类

queryset特性和queryset优化

无法在没有 `.queryset` 属性或覆盖 `.get_queryset()` 方法的视图上应用 DjangoModelPermissions

093:QuerySet API详解-QuerySet转换为SQL的条件