Я пытаюсь проверить уникальность адреса электронной почты в хранилище данных. Проблема в том, что это не позволяет мне редактировать / обновлять запись (например, если я только хочу изменить display_name - см. Models.py ниже).
Я отправляю сборку формы с использованием djangoforms (с предварительно заполненной записью в хранилище данных, поскольку я уже знаю ключ записи хранилища данных):
forms.UserForm(instance=db.get(db.Key(key)))
После отправки формы методом POST я получаю данные из хранилища данных и связываю их с отправленной формой:
entry = db.get(db.Key(self.request.get('key')))
data = forms.UserForm(data=self.request.POST, instance=entry)
if data.is_valid():
...
Затем форма проверяется с использованием следующего класса формы (в forms.py):
from django import forms
from google.appengine.ext.db import djangoforms
import models
class UserForm(djangoforms.ModelForm):
class Meta:
model = models.AuthorizedUsers
def clean_email(self):
"""Prevent duplicate email addresses."""
if self.Meta.model.all().filter('email =', self.cleaned_data['email']).count():
raise forms.ValidationError('Duplicate Entry: %s.' %
self.cleaned_data['email'])
return self.cleaned_data['email']
Использование следующей модели (в models.py)
class AuthorizedUsers(db.Model):
"""Base model class for storing user permissions."""
email = db.StringProperty()
display_name = db.StringProperty()
Любые предложения, что я здесь упускаю? Как я могу предотвратить возникновение ValidationError при обновлении записи? Помните, что я хочу предотвратить добавление новой записи в хранилище данных с тем же адресом электронной почты.
Заранее спасибо за помощь!