django - 序列化器 - Django REST 框架 - 序列化器字段可能命名不正确,并且与“str”实例上的任何属性或键都不匹配
问题描述
我想像示例一样填充chartJs:https ://www.chartjs.org/docs/latest/charts/bar.html
我收到此错误:
AttributeError at /timesheet/json-month/
Got AttributeError when attempting to get a value for field `working_hour` on serializer `TimesheetSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `str` instance.
Original exception text was: 'str' object has no attribute 'working_hour'.
使用此模型:
class Timesheet(models.Model):
owner = models.ForeignKey(User, on_delete = models.CASCADE)
title = models.CharField(max_length = 64, verbose_name = _("Title"))
date = models.DateField(default=datetime.datetime.now())
working_hour = models.FloatField(verbose_name = _("Working time"))
week = models.IntegerField(verbose_name = "working week")
def __str__(self):
return "{}".format(self.title)
def save(self, *args, **kwargs):
if not self.pk:
self.week = datetime.datetime.strptime("{}".format(self.date), "%Y-%m-%d").isocalendar()[1]
super(Timesheet, self).save(*args, **kwargs)
我像这样序列化我的数据(在我看来):
def get_month_hours(self):
cursor = connection.cursor()
cursor.execute("""
SELECT
MONTH(date),
SUM(working_hour)
FROM
timesheet_timesheet
WHERE
owner_id = %s
AND
date >= MONTH(CURRENT_TIMESTAMP) - 12
GROUP BY
MONTH(date)
""", [self.user])
row = cursor.fetchone()[0]
return str(row)
@api_view(['GET'])
def timesheet_total_per_month(request):
hours = ReturnHour(request.user.pk, datetime.datetime.now().isocalendar()[1])
timesheets = hours.get_month_hours()
serializer = TimesheetSerializer(timesheets, many=True, read_only = True)
return Response(serializer.data)
进入我的serializers.py:
class TimesheetSerializer(serializers.ModelSerializer):
class Meta:
model = Timesheet
fields ='__all__'
def create(self, validated_data):
"""
Create and return a new `Snippet` instance, given the validated data.
"""
return Timesheet.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.owner = validated_data.get('owner_id', instance.owner)
instance.date = validated_data.get('date', instance.date)
instance.title = validated_data.get('title', instance.title)
instance.working_hour = validated_data.get('working_hour', instance.working_hour)
return instance
你知道原因吗?
提前谢谢,
解决方案
我有类似的问题,只是您问题中的“str”实例是我的模型名称。我在视图集中使用了错误的序列化程序,即
class X_ViewSet(viewsets.ModelViewSet):
serializer_class = Xserilizer
#serializer_class = Yserializer
def get_queryset(self):
return Mmodel.objects.all()
推荐阅读
- python-3.x - 模块“instaloader”没有属性“Instaloader”
- c - 如何用零初始化结构的数组字段
- python - 在 python postgres sql 中,创建和插入查询正在执行而没有错误,但是在检查数据库时它没有得到更新
- animation - 如何制作像 VideoScribe 这样的桌面软件?
- java - 多对多关系的连接查询
- javascript - 正则表达式组排除组内的子字符串
- python - Python,问题获取带有按钮的组合框的值
- java - 如何将json转换为没有换行符和其他格式的字符串
- elixir - Elixir - 过滤具有给定日期范围内重叠日期的项目列表
- java - Java 服务 - SOAP 响应总是返回 NULL 到 .NET