Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从多个字段中删除好友_Python_Django - Fatal编程技术网

Python 如何从多个字段中删除好友

Python 如何从多个字段中删除好友,python,django,Python,Django,我正在使用Django开发一个约会网站,在那里我可以添加和删除好友。对于如何删除/取消添加的用户,我有一点复杂。使用我尝试过的代码,我得到了以下错误:“无法查询”oghomwenoguns:必须是“Profile”实例 类配置文件(models.Model): user=models.OneToOneField(settings.AUTH\u user\u MODEL,on\u delete=models.CASCADE,blank=True,null=True) bio=models.Char

我正在使用Django开发一个约会网站,在那里我可以添加和删除好友。对于如何删除/取消添加的用户,我有一点复杂。使用我尝试过的代码,我得到了以下错误:“无法查询”oghomwenoguns:必须是“Profile”实例

类配置文件(models.Model):
user=models.OneToOneField(settings.AUTH\u user\u MODEL,on\u delete=models.CASCADE,blank=True,null=True)
bio=models.CharField(最大长度=350,null=True,blank=True)
profile_pic=models.ImageField(上传_到='ProfilePicture/',default=“ProfilePicture/user img.png”,blank=True)
friends=models.ManyToManyField('Profile',blank=True)
date=models.DateTimeField(auto\u now\u add=True,null=True)
def删除朋友请求(请求,id):
我的朋友=获取对象或404(用户,id=id)
frequest=Profile.objects.filter(friends=my_friend)
frequest.delete()
返回HttpResponseRedirect(“/”)

如果您想从
请求.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('/')
您只需要将其从
好友列表中删除,而不是删除用户实例

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>
注意:确保所有
用户
实例都有
配置文件

可以使用以下命令序列更新当前iNtance:

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 %}
{request.user.friends.all%}
{%endfor%}

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

您想从
request.user.friends
?@John中删除
my\u friend
。。。对my_friend是我要删除的用户的id。尝试这样做,我得到了这个消息“无法查询”oghomwenoguns:必须是“Profile”实例。“oghomwenoguns”是我的朋友。我怎样才能把它取下来?@John.谢谢你。我认为这是有效的。但当我点击链接时,我发现页面没有找到404@GistDomBlog确保所有
user
实例都有一个
profile
instance createdi我不明白,我是django的新手。是否有一种方法可以让我了解如何确保所有用户实例都创建了一个概要文件实例。我能够完成添加到好友并接受好友请求。我能够从列表中删除好友,但问题是,如果两个用户成为好友,当A删除/取消好友B时,B仍然是A的好友。如何从多个字段中删除这两个好友?我的意思是,当A删除/取消朋友B时,A和B将不再是朋友。@GistDomBlog现在两个朋友都被删除了。