在制作一个简单的论坛时,我想制作一个主题词典以及他们的作者(OP用户)发送到包含主题列表的模板。
以下是模型:
class Topic(models.Model):
title = models.CharField(max_length=100)
description = models.TextField(max_length=10000, null=True)
forum = models.ForeignKey(Forum)
created = models.DateTimeField()
creator = models.ForeignKey(User, blank=True, null=True)
updated = models.DateTimeField(auto_now=True)
closed = models.BooleanField(blank=True, default=False)
visits = models.IntegerField(default = 0)
def num_posts(self):
return self.post_set.count()
def num_replies(self):
return max(0, self.post_set.count() - 1)
def last_post(self):
if self.post_set.count():
return self.post_set.order_by("created")[0]
def __unicode__(self):
return unicode(self.creator) + " - " + self.title
我不确定如何(以及在哪里)创建字典。我尝试在这样的视图中制作dict:
def forum(request, forum_id):
args = {}
topics = Topic.objects.filter(forum=forum_id).order_by("-created")
ops = {}
for t in topics:
ops[t] = User.objects.get(id = t.creator)
...
然而,这会导致此错误:
int() argument must be a string or a number, not 'User'
我是django的初学者并且在这里有股票,所以感谢你的提示。
答案 0 :(得分:2)
t.creator
已经是User
对象,因此您可以将其指定为:
ops[t] = t.creator
构建dicts的pythonic方法是向dict构造函数传递两项元组的列表:
ops = dict((t.title, t.creator) for t in topics)
但无论如何,你不需要字符串的字典来迭代模板。按原样传递queryset:
def forum(request, forum_id):
topics = Topic.objects.select_related('creator') \
.filter(forum=forum_id).order_by("-created")
return render(request, 'forum.html', {'topics': topics})
在forum.html
:
<ul>
{% for topic in topics %}
<li>{{ topic.title }} by {{ topic.creator }}</li>
{% endfor %}
</ul>