Python get()返回了多个朋友--它返回了2个
我正在尝试创建一个django应用程序,其中一个用户可以将其他用户添加为好友。这就是我所做的Python get()返回了多个朋友--它返回了2个,python,django,Python,Django,我正在尝试创建一个django应用程序,其中一个用户可以将其他用户添加为好友。这就是我所做的 models.py class Friend(models.Model): users = models.ManyToManyField(User) current_user = models.ForeignKey(User, related_name='all', null=True) views.py # view for adding or removing friends de
models.py
class Friend(models.Model):
users = models.ManyToManyField(User)
current_user = models.ForeignKey(User, related_name='all', null=True)
views.py
# view for adding or removing friends
def change_friends(request, pk):
new_friend = User.objects.get(pk=pk)
data = Friend.objects.get(current_user=request.user)
frnds = data.users.all()
new_friend in frnds:
data.users.remove(new_friend)
else:
data.users.add(new_friend)
redirect(request.META['HTTP_REFERER'])
# Displaying frinends,
def following(request, id=None):
my_friend, created = Friend.objects.get_or_create(current_user_id=id)
all_friends = my_friend.users.all()
return render(request, 'all/follow.html', {'all_friends': all_friends})
在我只从一个帐户添加朋友之前,这段代码一直运行良好,但是当我从几个帐户添加几个朋友时,它开始显示一个错误get()返回了多个朋友--它返回了2代码>
我们如何解决这个问题?谢谢大家! 删除管理中的所有好友实例,并将模型更改为:
class Friend(models.Model):
users = models.ManyToManyField(User)
current_user = models.OneToOne(User, related_name='friend', on_delete=models.CASCADE, null=True)
那么意见应该是:
# view for adding or removing friends
def change_friends(request, pk):
new_friend = User.objects.get(pk=pk)
friends = request.user.friend.users.all()
new_friend in friends:
request.user.users.remove(new_friend)
else:
request.user.users.add(new_friend)
redirect(request.META['HTTP_REFERER'])
# Displaying frinends,
def following(request, id=None):
my_friend, created = Friend.objects.get_or_create(current_user_id=id)
all_friends = my_friend.users.all()
return render(request, 'all/follow.html', {'all_friends': all_friends})
如果您使用many-to-many
记录朋友关系,最好将模型设置为:
current(OneToOne) users(ManyToMany)
current(ForeignKey) user(ForeignKey)
如果使用ForeignKey
记录好友关系,最好将模型设置为:
current(OneToOne) users(ManyToMany)
current(ForeignKey) user(ForeignKey)
更新
如果您不能再更改模型,只需将代码更改为:
def change_friends(request, pk):
new_friend = User.objects.get(pk=pk)
data = Friend.objects.filter(current_user=request.user)
has_user = False
for x in data:
if new_friend in x.users.all():
has_user = True
x.users.remove(new_friend)
if not has_user:
firend = Friend.objects.filter(current_user=request.user).first()
if friend:
friend.users.add(new_friend)
else:
friend = Friend.objects.create(current_user=request.user)
friend.users.add(new_friend)
redirect(request.META['HTTP_REFERER'])
在change friend函数中,这行代码是这样更改的
new_friend = User.objects.filter(pk=pk).first()
试试这个…先生,我正在制作中。删除实例不是一个好主意:(那么日志可能是重复的