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()