Angenommen Sie haben ein einfaches Modell haben:Django Modell: E-Mail-Feld eindeutig, wenn nicht null/leer
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)
Was ich möchte, ist zu tun, setzen E-Mail eindeutig zu sein, aber dabei unbedingt ich machen es so, dass ich leere E-Mail-Adressen ausschließe - und das will ich nicht.
Ich dachte über so etwas nach, aber ich frage mich, ob es einen besseren Weg gibt, damit umzugehen.
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's not blank
if not email_re.match(self.email) # If it's 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)
Gibt es einen besseren Weg, dies zu tun?
Haben Sie versucht,' null = true' Einstellung und 'einzigartig = true'? Was ist los mit der Verwendung von 'null' und' unique' zur gleichen Zeit? – CppLearner
Für das Leben von mir kann ich nicht herausfinden, wo ich lese, dass es nicht möglich war, blank = True und einzigartig = True auf einem charfield. –
lol ich Angenommen, du hast es schon ausprobiert :) Schön zu sehen, dass jemand mich echauffiert – CppLearner