在Django rest框架中更新用户时,电子邮件已存在

2024-09-22 18:25:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在更新用户时,我遇到了已经存在的电子邮件。 我怎么能用extra_kwargs来克服email already existsphone already exists问题。然后用from django.core.validators import EmailValidator作为"email": {"validators": [EmailValidator]}。。带回我的电子邮件字段验证

但这似乎不是真正的解决方案。 因为我们正在更新现有的模型对象。。为什么它的行为就像我们正在创造一个新的

我认为应该有定义updatepartial_update的东西,或者我不知道是什么是否有其他解决方案

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = "id", "full_name", "gender", "phone", "email", "date_of_birth"
        extra_kwargs = {
            # "phone": {"validators": []},
            # "email": {"validators": [EmailValidator]},
        }

Tags: django用户from电子邮件emailexistsphoneupdate
1条回答
网友
1楼 · 发布于 2024-09-22 18:25:00

据我所知,默认情况下,用户django中的email字段不是唯一的,如果要更改数据库中的唯一字段,可以使用AbstractUser,它将自动检测序列化程序中的唯一字段,并且无法使用已存在的电子邮件保存用户

然后假设,我们没有使用AbstracUser,所以我们需要在序列化程序中手动验证唯一的电子邮件。我们可以使用两种方法:

1UniqueValidator

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ["id", "full_name", "gender", "phone", "email", "date_of_birth"]
        extra_kwargs = {
            "email": {
                "validators": [
                    EmailValidator
                    UniqueValidator(
                       queryset=User.objects.all(),
                       message="This email already exist!"
                    )
                ]
            },
        }

2。手动验证电子邮件: 在我们的序列化程序中,只需添加验证电子邮件的函数

def validate_email(self, value):
    if User.objects.filter(email=value).exists():
       raise serializers.ValidationError("This email already exists!.")
    return value

CMIIW

相关问题 更多 >