【发布时间】:2010-12-22 14:41:45
【问题描述】:
我在列出此类数据时遇到了困难。情景是 如下:
- user1 添加了一个叫 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,
})
【问题讨论】: