2017-05-29 98 views
-1

我正在做一个Django项目(社交网络的一种),并希望有一个页面,我可以看到我所有的职位,我做了。Django no such列ForeignKey

我百达得到的错误:没有这样的列: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家伙:)

+1

你为什么首先使用'raw'查询? – errata

+0

不确定原始查询,但你有没有考虑以标准Django方式获取all_posts,如:all_posts = ContentItem.objects.get(user = request.user),而不是使用原始sql?不管你的理由是什么,它的值得检查,也许你的模型不同步; D到数据库,你只需要做一个manage.py迁移 – jnvilo

回答

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() 
+0

谢谢,它工作:) 只是改变了一下: all_posts = ContentItem.objects.filter(uploaded_by = request.user) –

相关问题