django.db.utils.IntegrityError: (1062, "Duplicate entry '' for key 'phone'")

起因:创建用户的时候老是报错。

之前是连接sqlite数据库的,后面修改成连接mysql数据库,然后发现上述错误

原因:

发现自己在序列化的时候没有把phone添加进去,导致每次生成新数据的时候,phone行都为空,model定义的时候指定了phone参数unique=True,所以一直报错,表格迁移没问题,数据什么的都没有问题。

解决方法:

在序列化中把字段phone添加进去。

附源码:

model:

from django.db import models
from common.models import BaseModel

class User(BaseModel):

    username = models.CharField(max_length=32, unique=True)
    password = models.CharField(max_length=32, null=True)
    phone = models.CharField(max_length=16, unique=True)

    class Meta:
        db_table = "user"

view:

    def register(self, request):

        username = request.data.get("username")
        password = request.data.get("password")
        phone = request.data.get("phone")

        data = {
            "username": username,
            "password": password,
            "phone": phone,
        }

        serilizer = Userserilizer(data=data)      # 这一句啊,每次保存数据都通过它,报错的时候一直没有添加phone,所以每次生成数据都为空,然后一直报错!!!

        if not serilizer.is_valid():
            data = {
                "msg": "用户已存在",
                "status": status.HTTP_400_BAD_REQUEST,
                "error": serilizer.errors,
            }
            return Response(data=data)

        serilizer.save()

        data = {
            "msg": "用户创建成功",
            "status": status.HTTP_200_OK,
            "data": serilizer.data
        }

        return Response(data=data)

原 serilizer.py: >

from rest_framework import serializers
from users.models import User


class Userserilizer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ["id", "username", "password"]

新:

from rest_framework import serializers
from users.models import User

class Userserilizer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ["id", "username", "password", "phone"]

总结: 这是一个非常低级的错误,用了三个小时来解决问题。

posted @ 2020-10-19 17:51  Morpheus1024  阅读(2070)  评论(0编辑  收藏  举报