我正在建立一个网站,只是为了更好地学习编程,但遇到了一个问题。我正在尝试创建用户主页的状态更新区域,其中当前用户的最新状态更新将显示在其页面顶部(如Facebook)。但是我检索数据的功能似乎根本不显示。我似乎无法看到问题可能在考虑所有其他功能是否与此类似。我所拥有的内容如下:
def show_user_homepage(request):
user1 = request.user
status = StatusUpdate.objects.filter(status_user=user1).order_by('status_date_time')[1:]
context = RequestContext(request,{'user':user1,'status':status})
return render_to_response('users/index.html',context_instance=context)
功能状态显示的模板部分是:
<div id="current-status">
<p>
Status:
<span class="italics">
{% if status.status_id %}
{{ status.status_text }}
{% else %}
No status currently available
{% endif %}
</span>
</p>
</div>
状态的类是:
class StatusUpdate(models.Model):
status_id = models.AutoField(primary_key=True)
status_user = models.ForeignKey(User)
status_text = models.CharField(max_length=2000)
status_date_time = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return '%s' % self.status_text
无论我尝试过什么,模板中的状态部分总是说没有可用的状态。谢谢你的帮助。
答案 0 :(得分:1)
list[1:]
会将元素从1返回到结尾。因此,您的status
变量不是单一状态,而是状态列表,列表没有属性status_id
使用[-1]
您也可以使用django函数latest
(http://docs.djangoproject.com/en/dev/ref/models/querysets/#latest)
StatusUpdate.objects.filter(status_user=user1).latest('status_date_time')
答案 1 :(得分:1)
status = StatusUpdate.objects.filter(status_user=user1).order_by('-status_date_time')[1:]
上面的代码将返回状态列表。因此,当您致电status.status_id
时,它将永远不会返回True
。
尝试通过添加[0]而不是[1:]来获取列表中的第一个元素。
答案 2 :(得分:1)
您需要将此添加到Model以进行默认排序:
class Meta:
ordering=['-status_date_time']
在show_user_homepage中写下这个:
status = StatusUpdate.objects.filter(status_user=user1)[0]