Django-tastypie: 错误:“元类没有属性‘object_class’”

创建于 2016-07-21  ·  6评论  ·  资料来源: django-tastypie/django-tastypie

你好,

当我将我的美味派从 13.3 更新到头部时,尝试运行我的 web 应用程序会引发此错误:

Request Method: GET
Request URL: http://192.168.0.104:8888/accounts/login/?next=/dashboard/

Django Version: 1.8.8
Python Version: 2.7.12
Installed Applications:
('longerusernameandemail',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'tastypie',
 'myapp',
 'widget_tweaks',
 'corsheaders')
Installed Middleware:
('corsheaders.middleware.CorsMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')

Traceback:
File "/home/user/anaconda2/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  119.                 resolver_match = resolver.resolve(request.path_info)
File "/home/user/anaconda2/lib/python2.7/site-packages/django/core/urlresolvers.py" in resolve
  365.             for pattern in self.url_patterns:
File "/home/user/anaconda2/lib/python2.7/site-packages/django/core/urlresolvers.py" in url_patterns
  401.         patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/home/user/anaconda2/lib/python2.7/site-packages/django/core/urlresolvers.py" in urlconf_module
  395.             self._urlconf_module = import_module(self.urlconf_name)
File "/home/user/anaconda2/lib/python2.7/importlib/__init__.py" in import_module
  37.     __import__(name)
File "/home/user/webserver/myapp/urls.py" in <module>
  7. from myapp.api import UserResource
File "/home/user/webserver/myapp/api.py" in <module>
  303. class MyResource(ModelResource):
File "/home/user/anaconda2/lib/python2.7/site-packages/tastypie/resources.py" in __new__
  1797.             if meta and meta.object_class:

Exception Type: AttributeError at /accounts/login/
Exception Value: class Meta has no attribute 'object_class'

如果我切换回 13.3 版(提交 a71dd6e85e18ec38e978e904c0c7a91dee11043d),那么它工作正常。

知道可能有什么问题吗?
谢谢

bug unconfirmed

最有用的评论

@SeanHayes :我刚刚遇到了同样的问题,因为我使用的是抽象基础资源。 这是一个复制品:

class BaseResource(ModelResource):
    class Meta:
        authentication = DefaultAuthentication()

class FooResource(BaseResource):
    class Meta(BaseResource.Meta):
        resource_name = 'foo'
        queryset = Foo.objects.all()

class BarResource(BaseResource):
    class Meta(BaseResource.Meta):
        resource_name = 'bar'
        queryset = Bar.objects.all()

这与 hashemian 粘贴的相同堆栈跟踪失败,在class BaseResource(ModelResource): ,因为 BaseResource 没有查询集。

我现在的解决方法是将object_class = NoneBaseResource.Meta ,然后一切正常。

我认为实际的解决方法是将 resources.py 行 1797 更改为if meta and getattr(meta, 'object_class'):

...或者如果 ModelResource 子类在未设置 queryset 时抛出错误是可取的行为,那么该错误可能更加明确。 不过,我不认为我的 BaseResource 应该失败,因为从那时起我不确定如何做我在这里尝试做的事情。

谢谢!

所有6条评论

能发一下你的资源吗?

在我的 urls.py 中,我导入tastypie.api.Api然后我将我的资源一一导入。 它似乎在尝试加载第一个资源时失败。 例如,这是其中一个资源,但即使我注释掉这个资源,它也会在下一个资源上崩溃。

class MyResource(ModelResource):
    class Meta:
        queryset = MyModel.objects.all()
        fields = ['my_field']
        allowed_methods = ['get']
        resource_name = 'my_resource'
        authentication = BasicAuthentication()
        include_resource_uri = False

我刚刚添加了回归测试,但他们未能重现错误:3e1f5527b698c7121d4c5434d073b08d364d31f2

您可以提供更多信息吗? 您的代码示例与您的实际代码有多接近?

感谢肖恩调查此事。 示例代码非常相似,我基本上只是更改了名称。 我会在最后再次检查并尝试查看是否有任何可能相关和缺失的元素。

结束,如果您有更多信息,请随时发表评论。

@SeanHayes :我刚刚遇到了同样的问题,因为我使用的是抽象基础资源。 这是一个复制品:

class BaseResource(ModelResource):
    class Meta:
        authentication = DefaultAuthentication()

class FooResource(BaseResource):
    class Meta(BaseResource.Meta):
        resource_name = 'foo'
        queryset = Foo.objects.all()

class BarResource(BaseResource):
    class Meta(BaseResource.Meta):
        resource_name = 'bar'
        queryset = Bar.objects.all()

这与 hashemian 粘贴的相同堆栈跟踪失败,在class BaseResource(ModelResource): ,因为 BaseResource 没有查询集。

我现在的解决方法是将object_class = NoneBaseResource.Meta ,然后一切正常。

我认为实际的解决方法是将 resources.py 行 1797 更改为if meta and getattr(meta, 'object_class'):

...或者如果 ModelResource 子类在未设置 queryset 时抛出错误是可取的行为,那么该错误可能更加明确。 不过,我不认为我的 BaseResource 应该失败,因为从那时起我不确定如何做我在这里尝试做的事情。

谢谢!

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

adamzap picture adamzap  ·  18评论

Roarster picture Roarster  ·  8评论

bastbnl picture bastbnl  ·  10评论

lordi picture lordi  ·  6评论

bmihelac picture bmihelac  ·  40评论