生徒が他の写真で好きになることができるような機能があります。
def LikePicture(request,picture_id):
p = Picture.objects.get(pk=picture_id)
new_like, created = Like.objects.get_or_create(user=request.user, picture_id=picture_id)
return HttpResponseRedirect(reverse('world:Boat', kwargs={'animal_id': the_id }))
現在、特定の写真が好きな人に制限を設けようとしています。特定のユーザーと友達になっている人だけに自分の写真を気に入ってもらいたいのですが、これを実現する唯一の方法は、友達モデルを実装することです。
2両方のユーザーがお互いを追加した場合にのみ、ユーザーは友達になることができます。
誰かが制限を実装するために両方を使用できるより良い友情モデルを持っていない限り、私はこの友情モデルを使用することを計画しています。
class Friendship(models.Model):
from_friend = models.ForeignKey(User, related_name='friend_set')
to_friend = models.ForeignKey(User, related_name='to_friend_set')
def __unicode__(self):
return u'%s, %s' % (
self.from_friend.username,self.to_friend.username)
class Meta:
unique_together = (('to_friend', 'from_friend'), )
私たちはとの関係を築くことができます
>>> user1 = User.objects.get(id=1)
>>> user2 = User.objects.get(id=2)
>>> friendship1 = Friendship(from_friend=user1, to_friend=user2)
>>> friendship1.save()
>>> user1.friend_set.all()
[<Friendship: user1, user2>, <Friendship: user1, user3>]
しかし、友達になるために。他のユーザーは他のユーザーを追加する必要があります。
>>> friendship3 = Friendship(from_friend=user2, to_friend=user1)
>>> friendship3.save()
>>> user2.friend_set.all()
[<Friendship: user2, user1>]
さて、問題は、友達だけが写真を好きになるように、like関数をどのように編集できるかということです。
私は方法を考えましたが、それを私のような関数に実装する方法を見つけることができませんでした。私の考えは、写真を所有しているUserオブジェクトと、写真を好きにしようとしている人をつかむことができるからです。お互いのフレンドリストを比較できます。写真を所有しているユーザーオブジェクトを取得し、写真を高く評価しようとしているユーザーオブジェクトを取得します。次に、写真を所有しているユーザーが、フレンドリストで自分の写真を高く評価しようとしているユーザーを持っているかどうかを比較します>>> user1.friend_set .all()とは逆に行います。ユーザー所有者の写真がrequest.userフレンドリスト内にある場合。。
つまり、両方のユーザーが同じフレンドリストにお互いを持っている場合のようになります。のように許可します!!!
この関数に似たものになります
def Like(request,picture_id):
user1 = User.objects.get(user=request.user) # The Guy who trying to like the picture
p = Picture.objects.get(pk=picture_id)
user2 = User.objects.get(picture=p) # The owner of the picture
if user1 is in user2.friend_set.all() AND if user2 is in user1.friend_set.all():
new_like, created = Like.objects.get_or_create(user=request.user, picture_id=picture_id)
else:
message ('You can only like if you are an friend ')
return HttpResponseRedirect(reverse('world:Boat', kwargs={'animal_id': the_id }))
return HttpResponseRedirect(reverse('world:Boat', kwargs={'animal_id': the_id }))
または、Usersオブジェクトを比較できます
>>> [friendship.to_friend for friendship in
user1.friend_set.all()]
[<User: user2>, <User: user3>]