2017-05-29 95 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) –

相關問題