Django-tastypie: خطأ: "لا تحتوي الفئة Meta على سمة 'object_class'"

تم إنشاؤها على ٢١ يوليو ٢٠١٦  ·  6تعليقات  ·  مصدر: django-tastypie/django-tastypie

أهلا،

عندما قمت بتحديث 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) فإنه يعمل بشكل جيد.

أي فكرة عما قد يكون الخطأ؟
شكرا

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

فشل هذا مع نفس تتبع المكدس الذي تم لصقه بواسطة الهاشمي ، في السطر class BaseResource(ModelResource): ، لأن BaseResource لا يحتوي على مجموعة استعلام.

الحل الآن هو إضافة object_class = None إلى BaseResource.Meta ، ثم يعمل كل شيء.

أعتقد أن الإصلاح الفعلي هو تغيير resources.py سطر 1797 إلى if meta and getattr(meta, 'object_class'):

... أو إذا كان سلوك الفئات الفرعية ModelResource مرغوبًا فيه لإلقاء خطأ عند عدم تعيين مجموعة الاستعلام ، فقد يكون هذا الخطأ أكثر وضوحًا. لا أعتقد أن 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()

فشل هذا مع نفس تتبع المكدس الذي تم لصقه بواسطة الهاشمي ، في السطر class BaseResource(ModelResource): ، لأن BaseResource لا يحتوي على مجموعة استعلام.

الحل الآن هو إضافة object_class = None إلى BaseResource.Meta ، ثم يعمل كل شيء.

أعتقد أن الإصلاح الفعلي هو تغيير resources.py سطر 1797 إلى if meta and getattr(meta, 'object_class'):

... أو إذا كان سلوك الفئات الفرعية ModelResource مرغوبًا فيه لإلقاء خطأ عند عدم تعيين مجموعة الاستعلام ، فقد يكون هذا الخطأ أكثر وضوحًا. لا أعتقد أن BaseResource الخاص بي يجب أن يفشل ، ولكن منذ ذلك الحين لست متأكدًا من كيفية القيام بما أحاول القيام به هنا.

شكرا!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات