Django rest framework 自定义序列化程序中未定义DRF名称
当我尝试在浏览器中点击我的Django rest framework 自定义序列化程序中未定义DRF名称,django-rest-framework,serialization,Django Rest Framework,Serialization,当我尝试在浏览器中点击我的api/atoms/端点时,我在views.py文件中得到一个名称未定义错误,但它在URL中有一个基本名称 注意:这是一个非模型序列化程序和一个视图集 错误 ...views.py", line 74, in list instance = atom.values(), many=True) NameError: name 'atoms' is not defined 视图.py class AtomViewSet(viewsets.ViewSet):
api/atoms/
端点时,我在views.py文件中得到一个名称未定义错误,但它在URL中有一个基本名称
注意:这是一个非模型序列化程序和一个视图集
错误
...views.py", line 74, in list
instance = atom.values(), many=True)
NameError: name 'atoms' is not defined
视图.py
class AtomViewSet(viewsets.ViewSet):
serializer_class = AtomSerializer
def list(self, request):
serializer = AtomSerializer(
instance = atoms.values(), many=True) #<-------------
return Response(serializer.data)
# for viewsets in views.py
router = DefaultRouter()
router.register(r'snippets', views.SnippetViewSet)
router.register(r'atoms', views.AtomViewSet, base_name='atoms')
urlpatterns = [
path('', views.api_root),
path('', include(router.urls)),
]
class AtomSerializer(serializers.Serializer):
uid = UniqueIdProperty()
created_at = DateTimeProperty()
updated_at = DateTimeProperty()
charge = IntegerProperty()
mass = FloatProperty()
def create(self, validated_data):
return Atom(id=None, **validated_data)
def update(self, instance, validated_data):
for field, value in validated_data.items():
setattr(instance, field, value)
return instance
序列化程序.py
class AtomViewSet(viewsets.ViewSet):
serializer_class = AtomSerializer
def list(self, request):
serializer = AtomSerializer(
instance = atoms.values(), many=True) #<-------------
return Response(serializer.data)
# for viewsets in views.py
router = DefaultRouter()
router.register(r'snippets', views.SnippetViewSet)
router.register(r'atoms', views.AtomViewSet, base_name='atoms')
urlpatterns = [
path('', views.api_root),
path('', include(router.urls)),
]
class AtomSerializer(serializers.Serializer):
uid = UniqueIdProperty()
created_at = DateTimeProperty()
updated_at = DateTimeProperty()
charge = IntegerProperty()
mass = FloatProperty()
def create(self, validated_data):
return Atom(id=None, **validated_data)
def update(self, instance, validated_data):
for field, value in validated_data.items():
setattr(instance, field, value)
return instance
在您的
views.py
中,您没有定义atom
,您需要在使用它之前先定义它,否则您将得到该错误
类AtomViewSet(ViewSet.ViewSet):
序列化程序_class=AtomSerializer
def列表(自我、请求):
#在将原子传递给AtomSerializer之前,需要先定义它
atoms=[]#或atom=atom.objects.all()
序列化程序=AtomSerializer(
数据=原子,
多=真
)
返回响应(serializer.data)
在您的视图.py
中,您没有定义atom
,您需要在使用它之前先定义它,否则您将得到该错误
类AtomViewSet(ViewSet.ViewSet):
序列化程序_class=AtomSerializer
def列表(自我、请求):
#在将原子传递给AtomSerializer之前,需要先定义它
atoms=[]#或atom=atom.objects.all()
序列化程序=AtomSerializer(
数据=原子,
多=真
)
返回响应(serializer.data)
这是在找不到本地或全局名称时引发的基本python异常。变量
未在列表()中定义或全局定义,这就是python解释器引发异常的原因。
在您的代码中,您会编写atoms.values()
,这迫使我认为您正在处理一个查询集,它可能是一个Atom
模型
class AtomViewSet(viewsets.ViewSet):
serializer_class = AtomSerializer
def list(self, request):
serializer = AtomSerializer(instance=Atom.objects.all(), many=True)
return Response(serializer.data)
类AtomViewSet(ViewSet.ViewSet):
序列化程序_class=AtomSerializer
def列表(自我、请求):
serializer=AtomSerializer(实例=Atom.objects.all(),many=True)
返回响应(serializer.data)
注意:这是一个非模型序列化程序和一个视图集
您正在类中执行和update
操作,这些操作直接连接到模型。我看不出有什么特别的原因会让你放弃使用模型序列化程序
。
除此之外,你正在使用路由器,当你处理CRUD操作时,这是一个很好的选择,因此,我强烈建议您在代码中结合使用ModelViewset
和ModelSerializer
。这是在找不到本地或全局名称时引发的基本python异常。
变量
未在列表()中定义或全局定义,这就是python解释器引发异常的原因。
在您的代码中,您会编写atoms.values()
,这迫使我认为您正在处理一个查询集,它可能是一个Atom
模型
class AtomViewSet(viewsets.ViewSet):
serializer_class = AtomSerializer
def list(self, request):
serializer = AtomSerializer(instance=Atom.objects.all(), many=True)
return Response(serializer.data)
类AtomViewSet(ViewSet.ViewSet):
序列化程序_class=AtomSerializer
def列表(自我、请求):
serializer=AtomSerializer(实例=Atom.objects.all(),many=True)
返回响应(serializer.data)
注意:这是一个非模型序列化程序和一个视图集
您正在类中执行和update
操作,这些操作直接连接到模型。我看不出有什么特别的原因会让你放弃使用模型序列化程序
。
除此之外,你正在使用路由器,当你处理CRUD操作时,这是一个很好的选择,因此,我强烈建议您在代码中结合使用ModelViewset
和
。使用一个图形数据库库,该数据库不使用常规模型类如果您的逻辑正常工作,请继续使用它。我的答案呢?这解决了你的问题吗?是的,谢谢。现在我了解到视图正在从序列化程序来回传递数据,并且仍然负责使用不使用常规模型类的图形数据库库提供数据。如果您的逻辑正常工作,请继续。我的答案呢?这解决了你的问题吗?是的,谢谢。现在我了解到视图正在从序列化程序来回传递数据,并且仍然负责提供数据“AssertionError:当序列化程序被传递时,必须调用数据
关键字参数。在尝试访问序列化的数据
表示之前,必须调用是否有效()“AssertionError:当序列化程序被传递一个数据
关键字参数时,在尝试访问序列化的数据
表示之前,必须调用.is\u valid()
。”