базовое уникальное поле ModelForm для Google App Engine - PullRequest
0 голосов
/ 01 октября 2009

Меня не волнуют проблемы параллелизма.

Относительно легко создать уникальное поле формы:

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)

чтобы можно было добавлять пользователей на лету. Редактировать существующего пользователя сложно. Это поле не позволит сохранить пользователя, имеющего электронную почту другого пользователя. В то же время это не позволило бы сохранить пользователя с тем же адресом электронной почты. Какой код вы используете для помещения поля с проверкой уникальности в ModelForm?

1 Ответ

1 голос
/ 01 октября 2009

Быстро и грязно было бы:

  1. make check_uniqueness classmethod
  2. использовать проверку пользовательских полей в ModelForm, например:

    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
    

лучшие варианты?

...