You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中model.objects.get()未按指定参数查询,出现日期转int错误

问题分析与解决方案

错误原因

错误提示invalid literal for int() with base 10: b'17 21:19:04.767380'说明代码在尝试将日期时间格式的字符串转换为整数,核心问题出在EmployeeSerializer序列化器的字段定义错误——你大概率把last_login_date或created_date错误地指定为了IntegerField,而非对应日期类型的序列化字段。

哪怕你用Employee.objects.get(pk=4)按主键查询,序列化器在处理返回的对象时,会遍历所有字段进行序列化,只要某个字段的序列化类型与模型字段不匹配,就会触发转换错误,和查询方式无关。

另外注意到你的模型中last_login_date是DateField,但错误信息里包含时间部分,可能存在额外情况:之前模型中该字段是DateTimeField,修改为DateField后未正确执行数据库迁移,导致数据库中字段仍为datetime类型。

解决方案

1. 修正序列化器字段定义

确保序列化器中日期字段使用正确的类型:

  • 如果使用ModelSerializer(推荐),直接关联模型即可自动匹配字段类型:
from rest_framework import serializers
from .models import Employee

class EmployeeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Employee
        fields = '__all__'  # 或指定需要序列化的具体字段列表
  • 如果手动定义Serializer,需为日期字段指定DateField:
from rest_framework import serializers
from .models import Employee

class EmployeeSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    name = serializers.CharField(max_length=127)
    surname = serializers.CharField(max_length=127)
    login = serializers.CharField(max_length=127)
    password = serializers.CharField(max_length=1023)
    email = serializers.EmailField()
    employee_role = serializers.CharField(max_length=31)
    salary = serializers.DecimalField(max_digits=10, decimal_places=2)
    department = serializers.PrimaryKeyRelatedField(queryset=Department.objects.all(), allow_null=True)
    last_login_date = serializers.DateField()  # 关键:必须是DateField,不能是IntegerField
    created_date = serializers.DateField()

    def create(self, validated_data):
        return Employee.objects.create(**validated_data)

2. 验证数据库迁移状态

如果之前修改过模型的日期字段类型,执行以下命令确保数据库结构与模型一致:

python manage.py makemigrations
python manage.py migrate

3. 额外检查

  • 确认视图中使用的序列化器是上述修正后的版本,避免引用了旧的错误定义
  • 测试时可以先打印查询到的Employee对象的last_login_date值,确认其类型为date而非字符串或其他类型

内容的提问来源于stack exchange,提问作者Rounded Hedgehog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 18:20:56