首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AttributeError: QuerySet对象没有属性“related_stocks”

AttributeError: QuerySet对象没有属性“related_stocks”
EN

Stack Overflow用户
提问于 2016-07-17 15:21:51
回答 2查看 2K关注 0票数 0

姜戈新手来了。我试图创建一个简单的应用程序来讨论股票,用户可以在其中创建主题,并与特定的股票建立多到多的关系。在“主题-细节”页面中,我想展示与该主题相关的所有股票。我遇到了一个障碍: AttributeError 'QuerySet‘对象没有属性’related‘。尽管我经历了其他人问过的类似问题,但我似乎还是搞不清楚。任何帮助都将不胜感激。请参阅我的代码如下:

models.py

代码语言:javascript
复制
class Topic(models.Model):
    title = models.CharField(max_length=50)
    related_stocks = models.ManyToManyField(Stock)
    slug = models.SlugField(max_length=200, blank=True)
    created = models.DateField(auto_now_add=True,
                           db_index=True)
    def __str__(self):
    return self.title

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
            super(Topic, self).save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('comments:topic_detail', args=[self.id, self.slug])

views.py

代码语言:javascript
复制
def topic_detail(request, id, slug):
    topic = Topic.objects.all().filter(id=id, slug=slug)
    related_stocks = topic.related_stocks
    return render(request,
                  'comments/comment/topic-detail.html',
                  {'section': 'topics',
                   'topic': topic,
                   'related_stocks': related_stocks})

topic-detail.html

代码语言:javascript
复制
{% extends "base.html" %}

{% block title %}{{ topic.title }}{% endblock %}

{% block content %}
    <h1>Stocks associated with {{ topic.title }}.</h1>
    {% for related_stock in related_stocks %}
    <ul>
        <a href="{{ related_stock.get_absolute_url }}">
            {{ related_stock.ticker }}
        </a>
    </ul>
    {% endfor %}
{% endblock %}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-17 15:23:49

您应该使用get而不是过滤器:

代码语言:javascript
复制
topic = Topic.objects.get(id=id, slug=slug)

过滤器返回数组。get只返回一个对象,您需要处理对象不存在的场景。

票数 4
EN

Stack Overflow用户

发布于 2016-07-17 15:24:38

代码语言:javascript
复制
topic = Topic.objects.all().filter(id=id, slug=slug)
related_stocks = topic.related_stocks

filter本质上返回一个Topic模型列表,因此topic没有related_stocks属性。

以下任一项:

  1. 如果您确信Topic.objects.all().filter(id=id, slug=slug)始终会返回单个对象,请使用get (请记住,如果发现无对象或超过1个对象,则会引发异常)。
  2. Topic.objects.all().filter(id=id, slug=slug)更改为Topic.objects.all().filter(id=id, slug=slug)[0],以便始终选择第一个topic对象。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38422790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档