【问题标题】:MultipleObjectsReturned - get() returned more than one User -- it returned 2MultipleObjectsReturned - get() 返回多个用户 - 它返回 2
【发布时间】:2022-08-24 22:40:00
【问题描述】:

我在使用 User.get() 时遇到了一些问题。 错误消息是:

MultipleObjectsReturned - get() 返回了多个用户——它 返回 2。

更多解释这里是我的视图.py

def message(request):

    username = request.GET.get(\'username\')

    user = User.objects.get()
    return render(request,\'member/message.html\',{
        \'username\':username,
        \'user\' : user
})

    if User.objects.filter(name=user).exists():

        return redirect(\'/\'+user+\'/?username=\'+username)
    else:
        new_user = User.objects.create(name=user)  
        new_user.save()
        return redirect(\'/\'+user+\'/?username=\'+username) 

def send(request):

    message = request.POST[\'message\']
    username = request.POST[\'username\']
    

    new_message = Message.objects.create(value=message,user=username)
    new_message.save()

    return HttpResponse(\'Message sent successfully\')

def getMessages(request,user):

    user = User.objects.get()
    messages = Message.objects.filter()
    return JsonResponse({\"messages\":list(messages.values())})

在这里我们有模型.py

class User(models.Model):
    member_id = models.BigAutoField(primary_key=True)
    username = models.CharField(max_length=100)
    name = models.CharField(max_length=100)
    email = models.EmailField(max_length=50)
    password = models.CharField(max_length=100)
    confrom_password = models.CharField(max_length=50)

class Message(models.Model):

    value = models.CharField(max_length=10000000)
    date = models.DateTimeField(default=datetime.now, blank=True)
    user = models.CharField(max_length=1000000)
  • 欢迎来到堆栈溢出。请格式化您的代码并包含示例数据。你是如何得到你的回应的?你做了什么来得到你的回应?你的数据库是什么样的?是否有多个条目?你不应该过滤项目吗? User.objects.get() 没有得到所有用户吗?

标签: python django django-models django-views


【解决方案1】:

您的 getMessages(request, user) 方法的目的是获取给定用户的消息吗?

如果是这样,请将其更改为此(您没有应用过滤,因为您在 get() 调用中没有参数):

def getMessages(request, user):
    user = User.objects.get(username=user)
    messages = Message.objects.filter()
    return JsonResponse({"messages":list(messages.values())})

您可能根本不需要在那里查询 User 模型,因为您的 Message 对象没有 User 表的外键,它只是一个 CharField 所以我假设只存储用户名。

如果您使用此方法的目的只是获取给定用户的消息,那么这应该有效:

def getMessages(request, user):
    messages = Message.objects.filter(user=user)
    return JsonResponse({"messages":list(messages.values())})

【讨论】:

  • 这个过程不起作用。
  • @Dipankar 它以什么方式不起作用?
  • 我刚刚将我的用户模型添加到这个问题中。当只有一个用户时它可以工作,当我添加另一个用户时它会显示错误。
  • 您是否在 User.objects.get() 调用中添加了“username=user”位?如果是这样,那么您实际上确实有两个具有相同用户名的用户,从技术上讲,您的模型将支持该用户名,因为您在模型中没有指定唯一性。
  • 这种方法不起作用。我认为如果您想更改某些内容,则必须更改消息线。
猜你喜欢
  • 1970-01-01
  • 2016-08-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 2022-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多