python - 序列化程序字段可能命名不正确,并且与 `dict` 实例上的任何属性或键都不匹配。\n原始异常文本为:'ilan_no'
问题描述
每当我values()
在查询集中使用方法时,我都会收到标题错误。如果我在views.py 中使用更简单的查询,比如Ilan.objects.all()
它工作正常。因此,似乎错误是由于 value() 方法造成的。我该如何解决?顺便说一句, ilan_no 是每一行的标识符号。我使用了 ModelSerializers 但没有任何改变。
Django==2.1 djangorestframework==3.11.0
模型.py:
class Ilan(models.Model):
ilan_no = models.IntegerField(unique=True, blank=True, null=True)
url = models.CharField(unique=True, max_length=255, blank=True, null=True)
add_date= models.DateField()
origin = models.CharField(max_length=100, blank=True, null=True)
city = models.CharField(max_length=20, blank=True, null=True)
district = models.CharField(max_length=30, blank=True, null=True)
price = models.IntegerField(blank=True, null=True)
序列化程序.py
class IlanSerializer(serializers.Serializer):
ilan_no = serializers.IntegerField()
url = serializers.CharField()
ilan_tarihi = serializers.DateField()
origin = serializers.CharField()
city = serializers.CharField()
district = serializers.CharField()
price = serializers.IntegerField()
视图.py
class IlcePriceAndSizeDistributionListView(ListAPIView):
queryset = Ilan.objects.annotate(year=ExtractYear('ilan_tarihi')).annotate(month=ExtractMonth('ilan_tarihi')).values(
'district', 'year', 'month').annotate(average_m2=Avg('m2_net')).annotate(average=Avg('price')).annotate(count=Count('ilan_no')).order_by('year', 'month')
serializer_class = IlanSerializer
整个错误:
Got KeyError when attempting to get a value for field `ilan_no` on serializer `IlanSerializer`.\nThe serializer field might be named incorrectly and not match any attribute or key on the `dict` instance.\nOriginal exception text was: 'ilan_no'.
整个trace_back:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/charts/api/v1/ilce_price_size
Django Version: 2.1
Python Version: 3.7.4
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'charts.apps.ChartsConfig',
'predictions.apps.PredictionsConfig']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'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 "C:\wsl\emlakanalizDjangoApp\.env\lib\site-packages\rest_framework\fields.py" in get_attribute
454. return get_attribute(instance, self.source_attrs)
File "C:\wsl\emlakanalizDjangoApp\.env\lib\site-packages\rest_framework\fields.py" in get_attribute
92. instance = instance[attr]
During handling of the above exception ('ilan_no'), another exception occurred:
File "C:\wsl\emlakanalizDjangoApp\.env\lib\site-packages\django\core\handlers\exception.py" in inner
34. response = get_response(request)
File "C:\wsl\emlakanalizDjangoApp\.env\lib\site-packages\django\core\handlers\base.py" in _get_response
126. response = self.process_exception_by_middleware(e, request)
File "C:\wsl\emlakanalizDjangoApp\.env\lib\site-packages\django\core\handlers\base.py" in _get_response
124. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\wsl\emlakanalizDjangoApp\.env\lib\site-packages\django\views\decorators\csrf.py" in wrapped_view
54. return view_func(*args, **kwargs)
File "C:\wsl\emlakanalizDjangoApp\.env\lib\site-packages\django\views\generic\base.py" in view
68. return self.dispatch(request, *args, **kwargs)
File "C:\wsl\emlakanalizDjangoApp\.env\lib\site-packages\rest_framework\views.py" in dispatch
505. response = self.handle_exception(exc)
File "C:\wsl\emlakanalizDjangoApp\.env\lib\site-packages\rest_framework\views.py" in handle_exception
465. self.raise_uncaught_exception(exc)
File "C:\wsl\emlakanalizDjangoApp\.env\lib\site-packages\rest_framework\views.py" in raise_uncaught_exception
476. raise exc
File "C:\wsl\emlakanalizDjangoApp\.env\lib\site-packages\rest_framework\views.py" in dispatch
502. response = handler(request, *args, **kwargs)
File "C:\wsl\emlakanalizDjangoApp\.env\lib\site-packages\rest_framework\generics.py" in get
199. return self.list(request, *args, **kwargs)
File "C:\wsl\emlakanalizDjangoApp\.env\lib\site-packages\rest_framework\mixins.py" in list
43. return self.get_paginated_response(serializer.data)
File "C:\wsl\emlakanalizDjangoApp\.env\lib\site-packages\rest_framework\serializers.py" in data
760. ret = super().data
File "C:\wsl\emlakanalizDjangoApp\.env\lib\site-packages\rest_framework\serializers.py" in data
260. self._data = self.to_representation(self.instance)
File "C:\wsl\emlakanalizDjangoApp\.env\lib\site-packages\rest_framework\serializers.py" in to_representation
678. self.child.to_representation(item) for item in iterable
File "C:\wsl\emlakanalizDjangoApp\.env\lib\site-packages\rest_framework\serializers.py" in <listcomp>
678. self.child.to_representation(item) for item in iterable
File "C:\wsl\emlakanalizDjangoApp\.env\lib\site-packages\rest_framework\serializers.py" in to_representation
516. attribute = field.get_attribute(instance)
File "C:\wsl\emlakanalizDjangoApp\.env\lib\site-packages\rest_framework\fields.py" in get_attribute
487. raise type(exc)(msg)
Exception Type: KeyError at /charts/api/v1/ilce_price_size
Exception Value: "Got KeyError when attempting to get a value for field `ilan_no` on serializer `IlanSerializer`.\nThe serializer field might be named incorrectly and not match any attribute or key on the `dict` instance.\nOriginal exception text was: 'ilan_no'."
解决方案
您错过了ilan_no
中的字段values
。只需将其添加到 values 方法的字段中:
queryset = Ilan.objects.annotate(year=ExtractYear('ilan_tarihi')).annotate(month=ExtractMonth('ilan_tarihi')).values(
'district', 'year', 'month', 'ilan_no').annotate(average_m2=Avg('m2_net')).annotate(average=Avg('price')).annotate(count=Count('ilan_no')).order_by('year', 'month')
推荐阅读
- latex - 页面每个角落的图像
- c# - 如何比较单个数组的元素
- c# - 使用 ac#script 更改预制件的颜色时,它会显示在检查器中,但不会显示在游戏视图中
- java - 在每 N 个字符处为字符串添加分隔符 Android?
- java - 列出地图中的值
- reactive-programming - RxJava2:在可观察到的处置之前发出项目
- terraform - 在 Terraform 中,如何在目录中运行特定的 *.tf 文件?
- python - Python从csv文件中的列中删除换行符
- python - 优化 CBOR 读取函数以将数据传递到 numpy
- blockchain - 锯齿验证器中需要备份(分类帐)的文件有哪些