2009-10-01 5 views
0

Je ne me soucie pas des problèmes de concurrence.Champ ModelForm unique et de base pour Google App Engine

Il est relativement facile de construire champ de formulaire unique:

from django import forms 

class UniqueUserEmailField(forms.CharField): 
    def clean(self, value): 
     self.check_uniqueness(super(UniqueUserEmailField, self).clean(value)) 

    def check_uniqueness(self, value): 
     same_user = users.User.all().filter('email', value).get() 
     if same_user: 
      raise forms.ValidationError('%s already_registered' % value) 

donc on pourrait ajouter des utilisateurs sur la volée. L'édition d'un utilisateur existant est difficile. Ce champ ne permettrait pas d'enregistrer l'utilisateur ayant d'autres courriels d'utilisateur. Dans le même temps, il ne permettrait pas d'enregistrer un utilisateur avec le même e-mail. Quel code utilisez-vous pour mettre un champ avec une vérification d'unicité dans ModelForm?

Répondre

1

moyen rapide et sale serait:

  1. faire check_uniqueness classmethod
  2. utiliser contrôle de champ personnalisé dans ModelForm, comme ceci:

    class User(forms.ModelForm):  
        email = forms.EmailField()  
    def clean_email(self): 
        data = self.cleaned_data['email'] 
        original = self.instance.email 
        if original == data: 
         return data 
        UniqueUserEmailField.check_uniqueness(data) 
        return data 
    

meilleures options?