接受后存储好友请求(在数据库中)



我正在构建一个社交媒体应用程序,并尝试在接受或拒绝后将好友请求存储在数据库中。

我要做的事情:-

user_1user_2发送好友请求时,它在Admin中存储sent or received friend requests,直到接受或拒绝。在接受或拒绝后将其从数据库中删除。但我想永久存储请求。所以我可以看到request.user发送或接收的所有请求。

型号.py

class FriendRequest(models.Model):
to_user = models.ForeignKey(settings.AUTH_USER_MODEL,related_name='to_user',on_delete=models.CASCADE)
from_user = models.ForeignKey(settings.AUTH_USER_MODEL,related_name='from_user',on_delete=models.CASCADE)

views.py

def send_friend_request(request,user_id):
user = get_object_or_404(User,id=user_id)
frequest, created = FriendRequest.objects.get_or_create(from_user=request.user,to_user=user)
return redirect('friends',user_id=user_id)

def accept_friend_request(request,user_id):
user1 = frequest.to_user
user2 = from_user
from_user = get_object_or_404(User,id=user_id)
frequest = FriendRequest.objects.filter(from_user=from_user,to_user=request.user).first()
user1.profile.friends.add(user2.profile)
user2.profile.friends.add(user1.profile)
if(FriendRequest.objects.filter(from_user=request.user,to_user=from_user).first()):
request_rev = FriendRequest.objects.filter(from_user=request.user,to_user=from_user).first()
request_rev.delete()
frequest.delete()
return redirect('friends',user_id=user_id)

我试过什么:-

我也尝试在FriendRequest Model中添加另一个实例,但它没有保存在Admin中。

我不知道,我该怎么做。

如有任何帮助,我们将不胜感激。

提前谢谢。

如果您想永久存储好友请求,可以在FriendRequest模型中添加一个新字段。新字段可以存储好友请求的状态。您可以给它一个默认值"挂起"、"已发送"或"已接收",因为当发送好友请求时,它处于挂起状态。如果好友请求被接受,您可以将好友请求的状态更新为"已接受",或者如果被拒绝,您可以更新其状态为"已拒绝"。

您的models.py现在看起来像:

class FriendRequest(models.Model):
to_user = models.ForeignKey(settings.AUTH_USER_MODEL,related_name='to_user',on_delete=models.CASCADE)
from_user = models.ForeignKey(settings.AUTH_USER_MODEL,related_name='from_user',on_delete=models.CASCADE)
PENDING = 'p'
ACCEPTED = 'a'
REJECTED = 'r'
STATUS_CHOICES = [
(PENDING, 'Pending'),
(ACCEPTED, 'Accepted'),
(REJECTED, 'Rejected')
]
status = models.CharField(max_length=1, choices=STATUS_CHOICES, default=PENDING)

如果您的FriendRequests模型已向管理员注册,它也会显示在管理员上。

accept_friend_request视图中,您可以简单地将其状态更新为"a",即"已接受",而不是从数据库中删除好友请求条目。

最新更新