[每当我在查询集中使用values()
方法时,都会出现标题错误。如果我在views.py中使用更简单的查询,例如Ilan.objects.all()
,则效果很好。因此,似乎该错误是由于value()方法引起的。我该如何解决?顺便说一句,ilan_no是每一行的标识符。我使用了ModelSerializers,但没有任何改变。
Django == 2.1djangorestframework == 3.11.0
models.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)
serializers.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()
views.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'.
整个回溯:
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')