【问题标题】:how to add a friend system to djangodjango如何添加好友系统
【发布时间】:2020-09-01 22:31:59
【问题描述】:

我一直在尝试给django添加一个好友系统,用户可以在其中添加和删除好友,在这个过程中我发现一个好友匹配查询不存在错误,说明这部分代码不好:

    friend = Friend.objects.get(current_user=request.user) 

现在我将在这里留下完整的代码。

views.py

    def profile(request, username=None):
        friend = Friend.objects.get(current_user=request.user)
        friends = friend.users.all()
        if username:
          post_owner = get_object_or_404(User, username=username)
          user_posts=Post.objects.filter(user_id=post_owner) 
        else:
          post_owner = request.user
          user_posts=Post.objects.filter(user=request.user)
        args1 = {
          'post_owner': post_owner,
          'user_posts': user_posts,
          'friends': friends,
        }
        return render(request, 'profile.html', args1)

    def change_friends(request, operation, pk):
        friend = User.objects.get(pk=pk)
        if operation == 'add':
          Friend.make_friends(request.user, friend)
        elif operation == 'remove':
          Friend.lose_friends(request.user, friend)
        return redirect('profile')

models.py

    class Friend(models.Model):
        users = models.ManyToManyField(User, default='users', blank=True, related_name='users')
        current_user = models.ForeignKey(User, related_name='owner', on_delete=models.CASCADE, null=True)

        @classmethod
        def make_friend(cls, current_user, new_friend):
            friend, created = cls.objects.get_or_create(
                current_user=current_user
            )
            friend.users.add(new_friend)

        @classmethod
        def lose_friend(cls, current_user, new_friend):
            friend, created = cls.objects.get_or_create(
                current_user=current_user
            )
            friend.users.remove(new_friend)

如果需要 profile.html 请告诉我:)

【问题讨论】:

标签: html django django-forms django-views django-queryset


【解决方案1】:

request.user 没有 Friend 记录,如错误所示。您可以简单地将 get 操作更改为 filter&first 操作。 Friend.objects.filter(current_user=request.user).first() 然后不要忘记检查朋友实例是否存在。所以你的观点应该是这样的:

def profile(request, username=None):
    friend = Friend.objects.filter(current_user=request.user).first()
    friends = []
    if friend:   
        friends = friend.users.all()
    if username:
        post_owner = get_object_or_404(User, username=username)
        user_posts = Post.objects.filter(user_id=post_owner) 
    else:
        post_owner = request.user
        user_posts = Post.objects.filter(user=request.user)
    args1 = {
        'post_owner': post_owner,
        'user_posts': user_posts,
        'friends': friends,
    }
    return render(request, 'profile.html', args1)

【讨论】:

  • 哇,你的代码救了我的命!!请问“朋友=[]”是什么意思?
  • 这只是为了在传递朋友作为上下文时防止 NoneTypeError 。我们需要定义所有通过 args1 字典发送的变量。
猜你喜欢
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 2011-08-16
  • 2011-10-31
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多