このタイプのデータを一覧表示するのに問題があります。シナリオは次のとおりです。
- user1addはuser2という友達です
- user2は、user1が彼の友達であることを確認します
何が起こるかは、user2とuser1が友達リストにお互いの名前を表示することです。現在、user2をuser1の友達リストに追加できますが、user1は自分のリストにuser2を表示できません。私の質問は、ユーザーが友情を確認した場合に、user1をuser2のリストに表示し、user2をuser1の友達リストに表示するにはどうすればよいですか?モデルで確認ステータスを利用することを考えていましたが、user1とuser2のIDは両方とも確認済みの関係にあるため、ここでは整合性の問題は発生しません。任意のヒント?
友情モデル:
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)
友情をレンダリングするためのビュー(ご覧のとおり、私はフィルタリングで遊んでいます):
@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,
})