我有一个点赞功能,可以让学生在其他图片中点赞。
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>]
现在,问题是我们如何编辑点赞功能,让它只允许朋友点赞一张图片。
我已经想到了一种方法,但我找不到将它实现到我的类似功能中的方法。我的想法是因为我们可以获取拥有图片的用户对象和想要喜欢图片的人。我们可以互相比较friendlist。我们得到拥有该图片的用户对象,我们得到试图喜欢该图片的用户对象。然后我们比较拥有该图片的用户在他的好友列表中是否有试图喜欢他的图片的用户>>> user1.friend_set .all() 我们反过来做。如果用户所有者的图片在 request.user 好友列表中。允许 Like!!! .
所以这就像,如果两个用户在同一个好友列表中都有对方。允许喜欢!!!
这将类似于此功能
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 }))
或者我们可以比较用户对象
>>> [friendship.to_friend for friendship in
user1.friend_set.all()]
[<User: user2>, <User: user3>]