У меня есть функция, которая позволяет студентам любить на других фотографиях.Django Сравнение списка пользователей
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'),)
Мы можем Bulid отношения с
>>> 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>]
Теперь Проблема заключается в том, как мы можем изменить как функцию, так это только позволяет друзьям нравится картину.
Я подумал об этом, но не смог найти способ реализовать его в своей функции. Моя идея состоит в том, что мы можем захватить объект User, которому принадлежит картина, и парень, который пытается понравиться картинке. Мы можем сравнить друг друга. Мы получаем объект пользователя, которому принадлежит изображение, и мы получаем объект пользователя, который пытается понравиться картинке. Затем сравним, если пользователь, у которого есть фотография, имеет пользователя, который пытается любить свою фотографию в своем списке друзей >>> user1. friend_set.all() , и мы делаем это в обратном порядке. Если изображение пользователя пользователя находится в списке друзей request.user .Allow 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>]
Надеюсь, этот вопрос имеет смысл, если только я не отредактирую его: D – donkeyboy72