2016-11-24 12 views
0

ここで、2つのテーブルを結合し、という値をポストテーブルの値のように増分し、現在のユーザー、PostId、has_liked = Trueを持つUserLikesテーブルに別の行を追加します。また、現在のユーザーが既に現在の投稿を好きであるかどうかを確認しますか?以下は私のコードです。Djangoで2つのテーブルを結合するためのクエリを書くには?

models.py

class Posts(models.Model): 
    title = models.CharField("Title", max_length=140) 
    url = models.FileField("URL") 
    likes = models.IntegerField("Likes", default=0) 
    by = models.ForeignKey(User) 
    date = models.DateTimeField(auto_now_add=True) 

    def __str__(self): 
     return self.title + ' by ' + str(self.by) 

class UserLikes(models.Model): 
    post = models.ForeignKey(Posts) 
    user = models.ForeignKey(User) 
    has_liked = models.BooleanField("Liked", default=False) 

    def __str__(self): 
     return str(self.post) + ' by ' + str(self.user) 

views.py

def like(request, pk): 
    if request.POST : 
     post = get_object_or_404(Posts, pk=pk) 
     print(request.user) 
     obj = UserLikes.objects.filter(post_id__in=post.id, user=request.user) 
     try: 
      if obj.has_liked is not True: 
       obj.post_id = post.id 
       obj.user = request.user 
       obj.has_liked = True 
       obj.save() 

      post.likes = str(int(post.likes) + 1) 
      post.save() 
     except AttributeError: 
      return HttpResponse(post.likes) 
    else: 
     return HttpResponse(post.likes, {'like': 'disabled'}) 

urls.py

url(r'^(?P<pk>\d+)/like/$', views.like, name='likes'), 

だから、何でしょうviews.pyファイル内のクエリ?

答えて

0

あなたPostモデルのlikesフィールドはちょうどあなたがそれをたくさん使用する必要がある場合はおそらくそれをPostのプロパティを作成、だけではなく、クエリと同類の数を取得し、データを複製している

@property 
def number_of_likes(self): 
    return self.userlikes_set.count() 

その後、残りの部分は、このインスタンスのためにユーザーのようなものを追加するだけです。

+0

ありがとう@Sayse、しかし私が理解できないのは、各ユーザを一度しか好きにならないように制限し、それを 'UserLikes'テーブルに保存する方法です。また、インデックスページを開いたときに、それを取得する方法、つまり、クエリとは何か? – CapJ

+0

@CapJユーザーごと、投稿ごとに1つだけ必要な場合は、 'UserLikes'モデルで' unique_together =( 'post'、 'user') 'を設定してください:https://docs.djangoproject.com/ja/1.10/ref/models/options /#unique-together –

+0

私を助けてくれてありがとう@elkubo。 – CapJ

関連する問題