我在列出此类数据时遇到困难。方案是
如下:


user1添加了一个名为user2的朋友
user2确认user1是他的朋友


应该发生的是user2和user1在他们的名字中看到彼此的名字
朋友列表。现在发生的事情是我能够将user2添加到user1
朋友列表,但user1在其列表中看不到user2。我的问题
是如何使user1显示在user2的列表中以及如何显示user2
如果用户已确认友谊,则在user1的朋友列表中?我曾是
考虑利用模型中的确认状态,并且
该用户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_user还是to_user。并且当请求被确认或拒绝时,您将更新两个友谊以反映此情况。

如果是后者,则每个朋友关系都由单个友谊对象表示。在这种情况下,您的对象设计将需要记录关系中的哪个朋友提出了请求,以便在检查对象时可以告诉哪个用户可以将请求转变为已确认的友谊。

关于python - 友谊关系问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1836176/

10-12 22:25