2017-03-07 44 views
0

我正在開發一個社交平臺,目前正在編寫用戶帖子的類似功能。但是,我似乎無法使其工作。這是我的Models.py:像Django中的功能

class Post(models.Model): 
    user = models.ForeignKey(User) 
    posted = models.DateTimeField(auto_now_add=True) 
    content = models.CharField(max_length=150) 
    picturefile = models.ImageField(upload_to="post_content", blank=True) 

class Like(models.Model): 
    user = models.ForeignKey(User, null=True) 
    post = models.ForeignKey(Post, null=True) 

我通過我的網址爲 'POST_ID' 通過帖子ID,然後在我的觀點:

def liking(request, post_id): 
    newlike = Like.objects.create() 
    newlike.post = post_id 
    newlike.user = request.user 
    newlike.save() 
    return redirect(reverse('dashboard')) 

但是,它返回以下錯誤:

Cannot assign "'47'": "Like.post" must be a "Post" instance. 

有沒有人知道我失蹤或做錯了什麼?

回答

2

當您期待Post實例時,您正在傳遞newlike.post一個數字(整數字段)。

這要高度重視工作:

from django.http.shortcuts import get_object_or_404 

def liking(request, post_id): 
    post = get_object_or_404(Post, id=post_id) 
    newlike = Like.objects.create(user=request.user, post=post) 
    return redirect(reverse('dashboard')) 

注1:更好地利用方便快捷get_object_or_404爲了籌集404錯誤當特定帖子不存在。 注2:通過調用objects.create會自動保存到數據庫並返回一個實例!

+0

爲什麼我在像模型迴歸「後」用戶名?而不是內容? – Acework

+0

你的意思是像'print newlike.post'返回用戶名?這實際上是在'Post'模型中用'__unicode __()'(如果使用python 2)或'__str __()'(用於python 3)方法定義的。當你在那個對象上執行'print'的時候,這個方法應該返回實際的字符串表示。 –

+0

不,我的意思是模型對象本身(如:post = models.ForeignKey(Post,null = True))。當我進入數據庫時​​,我想看看誰(在這種情況下是用戶對象)喜歡哪個帖子(帖子對象)。用戶對象正確地返回誰的用戶名,但後對象也返回一個用戶名;來自帖子所有者的用戶名,而不是帖子的內容本身。 – Acework

1

newlike.post應該是一個Post對象,而不是一個int。

你需要先找到ID後:

post = Post.objects.get(pk=post_id) 
newlike.post = post 

,或者,如果你不想做這個查詢:

newlike.post_id = post_id 
+0

爲什麼我的'發佈'在Like模型中返回用戶名?而不是內容? – Acework