Django admin EmailField с null=True, blank=True, unique=True сохраняет пустую строку ("") вместо null

Когда я использую Django EmailField с null=True, blank=True, unique=True, админ сохраняет пустую строку ("") вместо null. Поэтому я получаю ошибку "Пользователь с таким адресом электронной почты уже существует.".

Как говорится в этом тикете, эта проблема должна быть решена, и все в порядке, когда я использую CharField, но не EmailField. Есть ли способ решить эту проблему?

Чтобы решить эту проблему, необходимо преобразовать пустые строки в None перед сохранением данных в базе данных. Один из способов сделать это - переопределить метод save() в вашей модели.

from django.db import models

class MyUser(models.Model):
    email = models.EmailField(null=True, blank=True, unique=True)
    
    def save(self, *args, **kwargs):
        # Convert empty string to None for the email field
        if self.email == '':
            self.email = None
        super(MyUser, self).save(*args, **kwargs)

Надеюсь, это немного поможет вам.

Вы можете добавить чистый метод для этого, т.е. если значение для email равно '', то с помощью чистого метода вы можете добавить пользовательское значение к email и сохранить его в db.

Вы можете сделать это как

class Mymodel(models.Model):
    email =  models.EmailField(null=True, blank=True, unique=True)
    
    def clean(self):
        if self.email == '':
            self.email=None
        super().clean()
Вернуться на верх