我正在做一个Django项目(一种社交网络),并希望有一个页面,我可以看到我的所有帖子,我做了。
我总是得到错误:没有这样的专栏:uploaded_by
在models.py
中from django.db import models
from django.contrib.auth.models import User
class ContentItem(models.Model):
upload_date = models.DateTimeField(auto_now=True)
title = models.CharField(max_length=100, default='no title')
description = models.CharField(max_length=400, default='no description')
image = models.ImageField(upload_to='image_board/posts/', default='null')
uploaded_by = models.ForeignKey(User, default='0')
def __str__(self):
return self.title
在views.py中
def view_my_favorites(request):
all_posts = ContentItem.objects.raw('SELECT * FROM image_board_ContentItem WHERE uploaded_by = request.user.username')
template = loader.get_template('favorites.html')
context = {
'all_posts': all_posts,
}
return HttpResponse(template.render(context, request))
我想获取所有用户的用户名,如何在sql查询中将其设为?
Thaks guys :)
答案 0 :(得分:1)
您的实际问题可能是由于在添加uploaded_by字段后忽略了制作和运行迁移。
但是这里还有很多其他问题。
首先,您要将uploaded_by
列与不存在的列request.user.username
进行比较。您需要使用该变量的实际值。
其次,您将外键 - uploaded_by
- 与字符串username
进行比较。这些永远不会匹配。
第三,您正在使用原始查询。这里绝对没有必要这样做。
您的查询在Django查询语法中表达是微不足道的。你应该这样做:
all_posts = ContentItem.filter(uploaded_by=request.user)
甚至更简单:
all_posts = request.user.contentitem_set.all()