【问题标题】:AttributeError: 'QuerySet' object has no attribute 'tags'AttributeError:“QuerySet”对象没有属性“标签”
【发布时间】: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})

【问题讨论】:

    标签: python django view model


    【解决方案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()
    猜你喜欢
    • 1970-01-01
    • 2017-07-19
    • 2016-11-20
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    相关资源
    最近更新 更多