2016-06-26 11 views
-3

Lets sagen, ich Modell haben:django - validieren char-Feld als E-Mail

class Subscription(models.Model): 
    address = models.CharField(max_length=255) 

dann erstellen i Form:

class SubscriptionForm(ModelForm): 
    class Meta: 
     model = Subscription 
     fields = ['address'] 
    def clean_address(self): 
     email = self.cleaned_data['address'] 
     #VALIDATE HERE IF IT IS EMAIL 
     return email 

Wie kann ich anwenden email validator auf mein Feld ohne Modell zu ändern?

EDIT: Ist das überhaupt möglich?

+6

Warum das Rad neu erfinden, wenn Sie 'EmailField' haben? https://docs.djangoproject.com/de/1.9/ref/models/fields/#emailfield – DeepSpace

+0

Rufen Sie einfach den E-Mail-Validator manuell in Ihrem Formular? ... Was haben Sie versucht? – Sayse

+0

Aber wie kann ich es genau machen? –

Antwort

0

einen Validator zum validator Feld Ihres CharField hinzufügen:

from django.core.validators import EmailValidator 

emailvalidator = EmailValidator(message="invalid email") 

class Subscription(models.Model): 
    address = models.CharField(max_length=255, validators=[emailvalidator]) 

Aber Sie sollten stattdessen mit der EmailField betrachten.

+0

Aber kann ich es in SubscriptionForm-Klasse tun? –

+0

'SubscriptionForm' ist ein 'ModelForm', damit es vom Modell validiert werden kann. Wenn Sie den Validator explizit in Ihrem Formularfeld angeben möchten, sollten Sie eine Unterklasse von 'Form' verwenden und denselben E-Mail-Validator an das Formularfeld 'Adresse' übergeben –

1

Sie sind besser dran, nur den Validator im Modell zu setzen. Das Hinzufügen eines Validators wirkt sich nicht auf die Datenbank aus, so dass das Datenbankmodell nicht wirklich geändert wird.

aber wenn Sie wirklich nur den Validator aufrufen möchten, dann tun Sie das.

from django.core.validators import EmailValidator 
def clean_address(self): 
    email = self.cleaned_data['address'] 

    EmailValidator()(email)