序列化程序字段的名称可能不正确,并且与dict实例上的任何属性或键都不匹配。\ n原始异常文本为:'ilan_no'

问题描述 投票:0回答:1

[每当我在查询集中使用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'."
python django django-rest-framework django-orm
1个回答
0
投票

您错过了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')
    
© www.soinside.com 2019 - 2024. All rights reserved.