Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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 get()返回了多个朋友--它返回了2个_Python_Django - Fatal编程技术网

Python get()返回了多个朋友--它返回了2个

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

我正在尝试创建一个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
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()

试试这个…

先生,我正在制作中。删除实例不是一个好主意:(那么日志可能是重复的