首页 > 解决方案 > 我如何从多对多字段中删除朋友

问题描述

我正在使用 Django 开发一个约会网站,我可以在其中添加和删除朋友。我对如何删除/取消添加的用户有点复杂。使用我尝试过的代码,我得到这个错误“无法查询”oghomwenoguns:必须是“配置文件”实例。”

class Profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,blank=True,null=True)
    bio = models.CharField(max_length=350, null=True,blank=True) 
    profile_pic = models.ImageField(upload_to='ProfilePicture/', default="ProfilePicture/user-img.png", blank=True)
    friends = models.ManyToManyField('Profile', blank=True)
    date = models.DateTimeField(auto_now_add=True, null= True)  

def delete_friend_request(request, id):
    my_friend = get_object_or_404(User,id=id)
    frequest = Profile.objects.filter(friends=my_friend)
    frequest.delete()
    return HttpResponseRedirect('/')

<a href="{% url 'site:delete_friend_request' u.id %}" class="btn btn-primary btn-lg waves-effect font-weight-bold text-capitalize ml-0 mt-2" style="font-size:14px;padding:10px;width:40%;">Unfriend</a>

标签: pythondjango

解决方案


如果您想my_friendrequest.user.friends.

它会是这样的:

def delete_friend_request(request, id):
    user_profile = request.user.profile
    friend_profile = get_object_or_404(Profile,id=id) # Profile instance has the same id as user
    user_profile.friends.remove(friend_profile) # A removes B
    friend_profile.friends.remove(user_profile) # B removes A
    return HttpResponseRedirect('/')

您只需要将其从friends列表中删除,而不是删除用户实例。

注意:确保所有User实例都有一个Profile.

您可以使用以下命令序列更新当前实例:

python manage.py shell

from django.contrib.auth.models import User
from app_name.models import * # app_name must be the name of your application

user_with_no_profile = User.objects.filter(profile__isnull=True)

for u in user_with_no_profile:
  u.profile = Profile()
  u.save()

看到你的例子,一定要把html画成如下,这样只会出现用户朋友的id。

{% for u in request.user.friends.all %}
   <a href="{% url 'site:delete_friend_request' u.id %}" class="btn btn-primary btn-lg waves-effect font-weight-bold text-capitalize ml-0 mt-2" style="font-size:14px;padding:10px;width:40%;">Unfriend</a>
{% endfor %}

编辑:现在两个朋友都被删除了。


推荐阅读