Django-tastypie: Kesalahan: "kelas Meta tidak memiliki atribut 'object_class'"

Dibuat pada 21 Jul 2016  ·  6Komentar  ·  Sumber: django-tastypie/django-tastypie

Hai,

Ketika saya memperbarui kue lezat saya dari 13.3 ke kepala, mencoba menjalankan aplikasi web saya membuat kesalahan ini:

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'

Jika saya beralih kembali ke versi 13.3 (komit a71dd6e85e18ec38e978e904c0c7a91dee11043d) maka itu berfungsi dengan baik.

Tahu apa yang mungkin salah?
Terima kasih

bug unconfirmed

Komentar yang paling membantu

@SeanHayes : Saya baru saja mengalami masalah yang sama, karena saya menggunakan sumber daya dasar abstrak. Berikut reproduksinya:

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

Ini gagal dengan jejak tumpukan yang sama yang ditempelkan oleh hashemian, pada baris class BaseResource(ModelResource): , karena BaseResource tidak memiliki queryset.

Solusi saya untuk saat ini adalah menambahkan object_class = None ke BaseResource.Meta , lalu semuanya berfungsi.

Saya pikir perbaikan sebenarnya adalah mengubah baris resources.py 1797 menjadi if meta and getattr(meta, 'object_class'):

atau jika itu adalah perilaku yang diinginkan untuk subkelas ModelResource untuk membuat kesalahan saat queryset tidak disetel, maka kesalahan itu bisa lebih eksplisit. Saya tidak berpikir BaseResource saya harus gagal, sejak itu saya tidak yakin bagaimana melakukan apa yang saya coba lakukan di sini.

Terima kasih!

Semua 6 komentar

Bisakah Anda memposting sumber daya Anda?

di urls.py saya, saya mengimpor tastypie.api.Api dan kemudian saya mengimpor sumber daya saya satu per satu. Tampaknya gagal segera setelah mencoba memuat sumber daya pertama. Misalnya ini adalah salah satu sumber daya, tetapi bahkan jika saya mengomentari yang ini, sumber daya berikutnya macet.

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

Saya baru saja menambahkan tes regresi tetapi gagal mereproduksi kesalahan: 3e1f5527b698c7121d4c5434d073b08d364d31f2

Ada info lebih lanjut yang bisa Anda berikan? Seberapa dekat sampel kode Anda dengan kode Anda yang sebenarnya?

Terima kasih Sean untuk melihat ke dalam ini. Kode sampel sangat mirip, dan pada dasarnya saya hanya mengubah nama. Saya akan memeriksa lagi di pihak saya dan mencoba melihat apakah ada elemen yang mungkin relevan dan hilang.

Penutup, jangan ragu untuk berkomentar jika Anda memiliki info lebih lanjut.

@SeanHayes : Saya baru saja mengalami masalah yang sama, karena saya menggunakan sumber daya dasar abstrak. Berikut reproduksinya:

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

Ini gagal dengan jejak tumpukan yang sama yang ditempelkan oleh hashemian, pada baris class BaseResource(ModelResource): , karena BaseResource tidak memiliki queryset.

Solusi saya untuk saat ini adalah menambahkan object_class = None ke BaseResource.Meta , lalu semuanya berfungsi.

Saya pikir perbaikan sebenarnya adalah mengubah baris resources.py 1797 menjadi if meta and getattr(meta, 'object_class'):

atau jika itu adalah perilaku yang diinginkan untuk subkelas ModelResource untuk membuat kesalahan saat queryset tidak disetel, maka kesalahan itu bisa lebih eksplisit. Saya tidak berpikir BaseResource saya harus gagal, sejak itu saya tidak yakin bagaimana melakukan apa yang saya coba lakukan di sini.

Terima kasih!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat