Скажем, у вас простая модель:
Class Contact(models.Model):
email = models.EmailField(max_length=70,blank=True)
first = models.CharField(max_length=25,blank=True)
last = models.CharField(max_length=25,blank=True)
То, что я хотел бы сделать, это установить, что электронное письмо является уникальным, но при этом я обязательно сделаю так, чтобы исключить пустые адреса электронной почты - и я не хочу этого.
Я думал о чем-то подобном, но мне интересно, есть ли лучший способ справиться с этим.
from django.core.validators import email_re
from django.core.exceptions import ValidationError
def save(self, *args, **kwargs):
# ... other things not important here
self.email = self.email.lower().strip() # Hopefully reduces junk to ""
if self.email != "": # If it not blank
if not email_re.match(self.email) # If it not an email address
raise ValidationError(u'%s is not an email address, dummy!' % self.email)
if Contact.objects.filter(email = self.email) # If it already exists
raise ValidationError(u'%s already exists in database, jerk' % self.email)
super(Contact, self).save(*args, **kwargs)
Есть ли лучший способ сделать это?