Django的。如何限制"简介"页面只有#34;朋友"

时间:2018-01-20 18:46:28

标签: python django

我目前有一个"个人资料"显示已上载的特定用户信息的页面。目前它是通过

实现的
objects.filter(user = request.user)

我试图找出如何允许a,因为缺乏更好的描述,一个朋友"查看其他人的个人资料。现在,发出请求的用户获取自己的信息。我相信我知道如何建立“朋友”的能力。另一个用户...我只是不知道如何显示另一个用户信息,因为到目前为止所有我一直在过滤的是" request.user"

2 个答案:

答案 0 :(得分:1)

您可以使用Many-to-many relationships

执行此操作

你的对象应该是这样的

class Profile(models.Model):
    friends = models.ManyToManyField(Profile)

要检查目标个人资料是否属于您的朋友,您可以按照以下方式修改您的代码:

Profile.objects.filter(friends = request.user)

答案 1 :(得分:1)

我想分享一下如何在我的项目中实现这一点。这可能与我如何实现朋友关系有些具体,但我认为主要思想应该是相同的。

以下是view_profile

的观点
def view_profile(request, username):
    if request.user.username == username:
        return HttpResponseRedirect(reverse('accounts:profile'))
    #get the user we are looking at
    person = get_object_or_404(User, username=username)
    #get the userprofile
    person = person.userprofile
    person_friend_object, person_created = Friend.objects.get_or_create(current_user=person)
    user_friends = [friend for friend in person_friend_object.users.all()]
    follower_count = len(user_friends)

    friend = False

    context = {
        'person':person,
        'friend':friend,
        'follower_count':follower_count,
        'user_friends':user_friends,
    }

    if request.user.is_authenticated():
        friend_object, created = Friend.objects.get_or_create(current_user=request.user.userprofile)
        friends = [friend for friend in friend_object.users.all()]
        if person in friends:
            friend = True
        else:
            friend = False

    context['friend'] = friend

    return render(request, 'users/user_profile_view.html', context)

然后,在模板中,您可以使用模板逻辑控制朋友可以看到给定用户的个人资料。这是一个基本的例子:

{% if not friend %}
<p>You are not friends with this user</p><button>Add friend</button>
{% else %}
<p>You are friends with this user. Here is information about this user...(here you can show data on the user through by accessing the `person` context variable)</p><button>Unfriend</button>
{% endif %}

所以一切都由friend变量控制,该变量为True或False。

有很多方法可以做你所描述的,这只是我相信的一种方式。希望这对您的项目有所帮助。