python - 我如何从多对多字段中删除朋友
问题描述
我正在使用 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>
解决方案
如果您想my_friend
从request.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 %}
编辑:现在两个朋友都被删除了。
推荐阅读
- html - React 中的锚点
- c# - C# DateTime 如何确定现在和今天的时间
- excel - 如何通过VBA在excel中创建具有特殊格式的字符串列表
- postgresql - 如何对搜索结果进行分页?
- javascript - Jquery在数据表上使用ajax渲染Json内容
- logstash - 将日志文件合并到beats中的一个主日志文件并发送到logstash
- flutter - 如何使用下拉按钮显示通过 API (GET) 提取的数据
- c# - C# ssh 连接到 HP 交换机(绕过“更多”)
- powershell - 如何编写 Powershell 逻辑以从包含不同字符的行中提取特定字段
- node.js - 如何使用mongoDb获取字符串中关键字的出现次数