【问题标题】:Store friend request after accept ( In Database )接受后存储好友请求(在数据库中)
【发布时间】:2021-07-10 04:00:06
【问题描述】:

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

我想要做什么:-

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

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)

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 中添加另一个实例,但它没有保存在管理员中。

我不知道,我该怎么做。

任何帮助将不胜感激。

提前致谢。

【问题讨论】:

    标签: python django database django-admin


    【解决方案1】:

    如果您想永久存储好友请求,您可以在 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”,即“已接受”,而不是从数据库中删除好友请求条目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      相关资源
      最近更新 更多