我是有困难的与清单的这类数据。情况是 如下:

  1. 1添加的一个朋友打电话用户2
  2. 确认用户2,1是他的朋友

应该发生什么是用户2和1见的每个人名在他们的 朋友列表。发生了什么现在是我能够添加到用户2 1 朋友的名单,但看不到1用户2在他/她的名单。我的问题 是我怎么得到1显示在用户2的列表和用户2显示出来 在1的朋友列表如果一个用户已经确认的友谊?我 考虑利用的确认状态的模型,因为 这1和用户2是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,
        })
有帮助吗?

解决方案

这不是显而易见的,你的友谊的模式是关联的。是我朋友列表,列表中的所有友谊,其中我的 from_user?或者是这一切的友谊,其中我的 from_userto_user?

如果是前者,那么每一位朋友的关系是由两个友谊的目的,一个表明,你是我的朋友,一个指示,我是你的朋友。当用户请求,则将增加两个友谊。的地位将表明是否该请求人作出的,是的 from_userto_user.并且当请求确认或拒绝,你会更新这两者的友谊,以反映这一点。

如果是后者,那么每一位朋友的关系表示由一个单一的友谊对象。在这种情况下,你的目设计,将需要记录哪些朋友的关系提出的要求,所以,当你检查对象的你可以告诉其用户可以把要求进入确认的友谊。

其他提示

根据这一页面: http://docs.djangoproject.com/en/dev/topics/db/queries/

下列代码:

friends = Friendship.objects.filter(
        Q(to_friend=user) | Q(confirmed=3)
)

相当于: to_friend = user OR confirmed = 3.这可能不是你想要什么,根据你的描述。

这个看起来靠近你想要什么:

friends = Friendship.objects.filter(
        Q(to_friend=user) | Q(from_friend=user)
      , Q(confirmed=3)
)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top