Django RESTful API错误“type object'User'没有属性'_meta'” [英] Django RESTful API error "type object 'User' has no attribute '_meta'"

查看:228
本文介绍了Django RESTful API错误“type object'User'没有属性'_meta'”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试用django-rest-framework和cassandra构建RESTful API,一步一步地在 Django-rest-framework 我遇到这个错误

 追溯:
文件/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.pyin get_response
132. response = wrapped_callback(request,* callback_args,** callback_kwargs)
文件/usr/local/lib/python2.7/dist-packages/django/views/decorators/csrf.py在wrapped_view
58. return view_func(* args,** kwargs)
文件/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py在视图
71. return self.dispatch(request,* args,** kwargs )
文件/usr/local/lib/python2.7/dist-packages/rest_framework/views.py在调度
456. response = self.handle_exception(exc)
文件 /usr/local/lib/python2.7/dist-packages/rest_fram ework / views.py在调度
444. self.initial(request,* args,** kwargs)
文件/usr/local/lib/python2.7/dist-packages/rest_framework/ views.py在初始
359. self.check_permissions(request)
文件/usr/local/lib/python2.7/dist-packages/rest_framework/views.pyin check_permissions
304.如果不是permission.has_permission(请求,自我):
文件/usr/local/lib/python2.7/dist-packages/rest_framework/permissions.py在has_permission
125. perms = self.get_required_permissions(request.method,queryset.model)
文件/usr/local/lib/python2.7/dist-packages/rest_framework/permissions.py在get_required_permissions
104.'app_label ':model_cls._meta.app_label,

异常类型:/ users /
中的AttributeError异常值:类型对象'User'没有属性'_meta'

这是我的代码



urls.py

  from django.conf.urls import url 
from rest_framework.urlpatterns import format_suffix_patterns
从教程导入视图

urlpatterns = [
#示例:

url(r'^ users / $',views.UsersList.as_view()),
url(r'^ users /(?P< pk> [0-9] )/ $',views.UserDetail.as_view()),
]


urlpatterns = format_suffix_patterns(urlpatterns)
pre>

models.py

 导入uuid 
从cassandra.cqlengine导入列
从cassandra.cqlengine.models import模型
#在此创建您的模型。

class User(Model):
id = columns.UUID(primary_key = True,default = uuid.uuid4)
username = columns.Text(max_length = 30,required =
password = columns.Text(max_length = 55,required = True)
gender = columns.UUID(default = 0)
languages = columns.List(value_type = columns.UUID)
friends = columns.Set(value_type = columns.UUID)

序列化程序。 py

  from rest_framework import serializers 
from tutorial.models import User

class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields =('username','position','gender','status','language')

views.py


$ b $来自tutorial.models import的b $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ gen gen gen gen gen gen gen gen gen gen gen gen gen gen gen gen erics.ListCreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer

class UserDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = User.objects .all()
serializer_class = UserSerializer

提前感谢您的支持。 p>

解决方案

据了解,Cassandra的模型不实现一个元类,需要使用rest_framework等应用程序。您将需要实现django兼容模型以使用rest_framework。



正如django-cassandra引擎的开发人员所说:


cqlengine即将并入python-driver。之后,我们可以考虑一下,但重要的是要知道,这个django-cassandra引擎从来没有意图完全兼容django模型。


Github问题 here


I'm trying to build RESTful API's with django-rest-framework and cassandra, following step by step the official django-rest-framework tutorial at Django-rest-framework I encountered this error

Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
132. response = wrapped_callback(request,  *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/csrf.py" in wrapped_view
58.         return view_func(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py" in view
  71.             return self.dispatch(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/rest_framework/views.py" in   dispatch
456.             response = self.handle_exception(exc)
File "/usr/local/lib/python2.7/dist-packages/rest_framework/views.py" in   dispatch
444.             self.initial(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/rest_framework/views.py" in    initial
359.         self.check_permissions(request)
File "/usr/local/lib/python2.7/dist-packages/rest_framework/views.py" in check_permissions
304.             if not permission.has_permission(request, self):
File "/usr/local/lib/python2.7/dist-packages/rest_framework/permissions.py" in has_permission
125.         perms = self.get_required_permissions(request.method, queryset.model)
File "/usr/local/lib/python2.7/dist-packages/rest_framework/permissions.py" in get_required_permissions
104.             'app_label': model_cls._meta.app_label,

Exception Type: AttributeError at /users/
Exception Value: type object 'User' has no attribute '_meta'

This is my code

urls.py

from django.conf.urls import  url
from rest_framework.urlpatterns import format_suffix_patterns
from tutorial import views

urlpatterns = [
    # Examples:

    url(r'^users/$', views.UsersList.as_view()),
    url(r'^users/(?P<pk>[0-9]+)/$', views.UserDetail.as_view()),
]


urlpatterns = format_suffix_patterns(urlpatterns)

models.py

import uuid
from cassandra.cqlengine import columns
from cassandra.cqlengine.models import Model
# Create your models here.

class User(Model):
    id = columns.UUID(primary_key=True, default=uuid.uuid4)
    username = columns.Text(max_length=30, required=True)
    password = columns.Text(max_length=55, required=True)
    gender = columns.UUID(default=0)
    languages = columns.List(value_type=columns.UUID)
    friends = columns.Set(value_type=columns.UUID)

serializers.py

from rest_framework import serializers
from tutorial.models import User

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'position', 'gender', 'status', 'language')

views.py

from tutorial.models import User
from tutorial.serializers import UserSerializer
from rest_framework import generics

class UsersList(generics.ListCreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

class UserDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

Thank you in advance for your support.

解决方案

As far as I know cassandra's models don't implement a meta class, which is required to work with applications like rest_framework. You will need to implement django compatible models to work with rest_framework.

As stated for one of the developers of django-cassandra-engine:

cqlengine is about to be merged into python-driver soon. After that we can think about it, but it is important to know, that django-cassandra-engine never meant to be fully compatible with django models.

Github issue here

这篇关于Django RESTful API错误“type object'User'没有属性'_meta'”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆