首页 > 解决方案 > 接受后存储好友请求(在数据库中)

问题描述

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

我正在尝试做的事情:-

当向管理员user_1发送好友请求时,它会存储直到接受或拒绝。在接受或拒绝后将其从数据库中删除。但我想永久存储请求。所以我可以看到所有发送或接收的请求。user_2sent or received friend requestsrequest.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)

视图.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但它没有保存在管理员中。

我不知道,我该怎么做。

任何帮助,将不胜感激。

先感谢您。

标签: pythondjangodatabasedjango-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 模型已在 admin 中注册,它也会显示在 admin 中。

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


推荐阅读