Je rencontre des difficultés avec ce type de données. Scénario est comme suit:Une question de relation d'amitié
- user1 ajouter est un ami appelé utilisateur2
- utilisateur2 confirme que user1 est son ami
ce qui devrait arriver est user2 et user1 voir de chacun d'autres noms dans leur liste amis . Ce qui se passe maintenant, c'est que je peux ajouter la liste d'amis user2 à user1 mais user1 ne peut pas voir user2 dans sa liste. Ma question est de savoir comment j'obtiens user1 à apparaître dans la liste de user2 et user2 pour montrer dans la liste d'amis de user1 si un utilisateur a confirmé l'amitié? J'étais en pensant à l'utilisation de l'état de confirmation dans le modèle et parce que que id de l'utilisateur1 et user2 est à la fois dans la relation confirmée I ne voient pas de problèmes d'intégrité ici. Des conseils?
modèle d'amitié:
class Friendship(models.Model):
NOT_CONFIRMED = 1
PENDING= 2
CONFIRMED = 3
STATUS_CHOICES = (
(NOT_CONFIRMED, 'Not Confirmed'),
(PENDING, 'Pending'),
(CONFIRMED, 'Confirmed'),
)
from_friend = models.ForeignKey(User, related_name='friend_set')
to_friend = models.ForeignKey(User, related_name='to_friend_set')
confirmed = models.IntegerField(choices=STATUS_CHOICES,
default=NOT_CONFIRMED)
class Meta:
unique_together = (('to_friend', 'from_friend'),)
def __unicode__(self):
return '%s, %s' % (self.from_friend.username,
self.to_friend.username)
Vues pour rendre les amitiés (comme vous pouvez le voir, je joue avec le filtrage):
@login_required
def friends_list(request, username):
user = get_object_or_404(User, username=username)
#friends = [friendship for friendship in user.friend_set.filter(Q
(confirmed=2) | Q(confirmed=3))]
friends = Friendship.objects.filter(
Q(to_friend=user) | Q(confirmed=3)
)
# get friends latest 10 shows
friend_shows = Show.objects.filter(user__in=friends).order_by('-id')
return render_to_response('habit/friends_list.html', {
'user': request.user,
'friends': friends,
'shows': friend_shows[:10],
'username': username,
})