2017-03-07 15 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の' のように、その後、私の意見では、私のURLからポスト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に数値(整数フィールド)を渡しています。

このsould作品:

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:特定のポストが存在しない場合より良い404エラーが発生するために、便利なショートカットget_object_or_404を使用しています。 注2:objects.createを呼び出すと自動的にdbに保存され、インスタンスが返されます!

+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は、intではなくPostオブジェクトである必要があります。あなたがこの検索行うにはしたくない場合は、

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

のか:

あなたが最初のIDでポストを見つける必要があり

newlike.post_id = post_id 
+0

なぜLikeモデルの私の '投稿'はコンテンツの代わりにユーザー名を返しますか? – Acework

関連する問題