如何给django添加好友系统
how to add a friend system to django
我一直在尝试为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 请告诉我:)
如错误提示,request.user 没有好友记录。您可以简单地将 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)
我一直在尝试为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 请告诉我:)
request.user 没有好友记录。您可以简单地将 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)