Привет,
Когда я обновил свой вкусный пирог с 13.3 до головы, попытка запустить мое веб-приложение выдает эту ошибку:
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 (commit a71dd6e85e18ec38e978e904c0c7a91dee11043d), все будет нормально.
Есть идеи, что может быть не так?
Спасибо
Не могли бы вы разместить свои ресурсы?
в моем 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 = None
к BaseResource.Meta
, тогда все
Я думаю, что фактическое исправление состоит в том, чтобы изменить строку resources.py 1797 на if meta and getattr(meta, 'object_class'):
... или если желательно, чтобы подклассы ModelResource выдавали ошибку, когда набор запросов не установлен, тогда эта ошибка может быть более явной. Однако я не думаю, что мой BaseResource должен выйти из строя, с тех пор я не уверен, как делать то, что я пытаюсь сделать здесь.
Спасибо!
Самый полезный комментарий
@SeanHayes : Я столкнулся с той же проблемой, потому что использовал абстрактный базовый ресурс. Вот репродукция:
Это не удается с той же трассировкой стека, вставленной hashemian в строку
class BaseResource(ModelResource):
, потому что BaseResource не имеет набора запросов.Мой обходной путь сейчас - добавить
object_class = None
кBaseResource.Meta
, тогда всеЯ думаю, что фактическое исправление состоит в том, чтобы изменить строку resources.py 1797 на
if meta and getattr(meta, 'object_class'):
... или если желательно, чтобы подклассы ModelResource выдавали ошибку, когда набор запросов не установлен, тогда эта ошибка может быть более явной. Однако я не думаю, что мой BaseResource должен выйти из строя, с тех пор я не уверен, как делать то, что я пытаюсь сделать здесь.
Спасибо!