Django不允许获取/创建新对象:QuerySet对象没有get_or_create属性

1 投票
1 回答
1013 浏览
提问于 2025-04-17 21:32

我在用Python 3.2和Django 1.6.2搭配PostgreSQL数据库。想用一个叫做get_or_create的快捷方式来有条件地创建对象时,遇到了AttributeError的错误。

当然,解决这个问题的方法是,在尝试获取对象时捕捉这个异常,然后再创建它。但是,能不能直接用正常的get_or_create来做到呢?

'QuerySet' object has no attribute 'get_or_create'
Traceback (most recent call last):

  File "/Users/urk/Documents/virtualenv/pycharm_python_3_3/lib/python3.3/site-packages/tastypie/resources.py", line 195, in wrapper
    response = callback(request, *args, **kwargs)

  File "/Users/urk/Documents/virtualenv/pycharm_python_3_3/lib/python3.3/site-packages/tastypie/resources.py", line 426, in dispatch_list
    return self.dispatch('list', request, **kwargs)

  File "/Users/urk/Documents/virtualenv/pycharm_python_3_3/lib/python3.3/site-packages/tastypie/resources.py", line 458, in dispatch
    response = method(request, **kwargs)

  File "/Users/urk/Documents/virtualenv/pycharm_python_3_3/lib/python3.3/site-packages/tastypie/resources.py", line 1320, in post_list
    updated_bundle = self.obj_create(bundle, **self.remove_api_resource_names(kwargs))

  File "/Users/urk/Documents/xxx/app/api/userresource.py", line 51, in obj_create
    api_key, created = ApiKey.objects.get_or_create(user=rv.obj)

  File "/Users/urk/Documents/virtualenv/pycharm_python_3_3/lib/python3.3/site-packages/django/db/models/manager.py", line 154, in get_or_create
    return self.get_queryset().get_or_create(**kwargs)

AttributeError: 'QuerySet' object has no attribute 'get_or_create'

编辑:代码示例。下面这段代码在运行python manage.py shell时会出现这个异常。

from django.contrib.auth.models import User
User.objects.get_or_create(username='tu')

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Users/urk/Documents/virtualenv/pycharm_python_3_3/lib/python3.3/site-packages/django/db/models/manager.py", line 154, in get_or_create
    return self.get_queryset().get_or_create(**kwargs)
AttributeError: 'QuerySet' object has no attribute 'get_or_create'

1 个回答

0

按照@AndreyNelubin的建议,重新创建虚拟环境解决了这个问题。

撰写回答