姜戈新手来了。我试图创建一个简单的应用程序来讨论股票,用户可以在其中创建主题,并与特定的股票建立多到多的关系。在“主题-细节”页面中,我想展示与该主题相关的所有股票。我遇到了一个障碍: AttributeError 'QuerySet‘对象没有属性’related‘。尽管我经历了其他人问过的类似问题,但我似乎还是搞不清楚。任何帮助都将不胜感激。请参阅我的代码如下:
models.py
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
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
{% 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 %}发布于 2016-07-17 15:23:49
您应该使用get而不是过滤器:
topic = Topic.objects.get(id=id, slug=slug)过滤器返回数组。get只返回一个对象,您需要处理对象不存在的场景。
发布于 2016-07-17 15:24:38
topic = Topic.objects.all().filter(id=id, slug=slug)
related_stocks = topic.related_stocksfilter本质上返回一个Topic模型列表,因此topic没有related_stocks属性。
以下任一项:
Topic.objects.all().filter(id=id, slug=slug)始终会返回单个对象,请使用get (请记住,如果发现无对象或超过1个对象,则会引发异常)。Topic.objects.all().filter(id=id, slug=slug)更改为Topic.objects.all().filter(id=id, slug=slug)[0],以便始终选择第一个topic对象。https://stackoverflow.com/questions/38422790
复制相似问题