Django-tastypie: рддреНрд░реБрдЯрд┐: "рд╡рд░реНрдЧ рдореЗрдЯрд╛ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ 'object_class'"

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рдЬреБрд▓ре░ 2016  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: django-tastypie/django-tastypie

рдирдорд╕реНрддреЗ,

рдЬрдм рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЯреЗрд╕реНрдЯреАрдкреА рдХреЛ 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 рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рддрд╛ рд╣реВрдВ (рдХрдорд┐рдЯ a71dd6e85e18ec38e978e904c0c7a91dee11043d) рддреЛ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рдзрдиреНрдпрд╡рд╛рдж

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@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()

рдпрд╣ рд▓рд╛рдЗрди class BaseResource(ModelResource): рдкрд░ рд╣реИрд╢рд┐рдпрди рджреНрд╡рд╛рд░рд╛ рдЪрд┐рдкрдХрд╛рдП рдЧрдП рд╕рдорд╛рди рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмреЗрд╕ рд░рд┐рд╕реЛрд░реНрд╕ рдореЗрдВ рдХреЛрдИ рдХреНрд╡реЗрд░реАрд╕реЗрдЯ рдирд╣реАрдВ рд╣реИред

рдЕрднреА рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди object_class = None рд╕реЗ BaseResource.Meta рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рдлрд┐рд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реБрдзрд╛рд░ Resources.py рд▓рд╛рдЗрди 1797 рдХреЛ if meta and getattr(meta, 'object_class'): рдмрджрд▓рдирд╛ рд╣реИ

рдпрд╛ рдпрджрд┐ рдХреНрд╡реЗрд░реАрд╕реЗрдЯ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ ModelResource рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрдирд╛ рд╡рд╛рдВрдЫрдиреАрдп рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рддреЛ рд╡рд╣ рддреНрд░реБрдЯрд┐ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддреА рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореЗрд░рд╛ рдмреЗрд╕ рд░рд┐рд╕реЛрд░реНрд╕ рд╡рд┐рдлрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐, рддрдм рд╕реЗ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдзрдиреНрдпрд╡рд╛рдж!

рд╕рднреА 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()

рдпрд╣ рд▓рд╛рдЗрди class BaseResource(ModelResource): рдкрд░ рд╣реИрд╢рд┐рдпрди рджреНрд╡рд╛рд░рд╛ рдЪрд┐рдкрдХрд╛рдП рдЧрдП рд╕рдорд╛рди рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмреЗрд╕ рд░рд┐рд╕реЛрд░реНрд╕ рдореЗрдВ рдХреЛрдИ рдХреНрд╡реЗрд░реАрд╕реЗрдЯ рдирд╣реАрдВ рд╣реИред

рдЕрднреА рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди object_class = None рд╕реЗ BaseResource.Meta рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рдлрд┐рд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реБрдзрд╛рд░ Resources.py рд▓рд╛рдЗрди 1797 рдХреЛ if meta and getattr(meta, 'object_class'): рдмрджрд▓рдирд╛ рд╣реИ

рдпрд╛ рдпрджрд┐ рдХреНрд╡реЗрд░реАрд╕реЗрдЯ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ ModelResource рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрдирд╛ рд╡рд╛рдВрдЫрдиреАрдп рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рддреЛ рд╡рд╣ рддреНрд░реБрдЯрд┐ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддреА рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореЗрд░рд╛ рдмреЗрд╕ рд░рд┐рд╕реЛрд░реНрд╕ рд╡рд┐рдлрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐, рддрдм рд╕реЗ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдзрдиреНрдпрд╡рд╛рдж!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

bastbnl picture bastbnl  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

thomasyip picture thomasyip  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

adamzap picture adamzap  ┬╖  18рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lordi picture lordi  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Roarster picture Roarster  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ