3
我想驗證數據存儲中電子郵件地址的唯一性。問題是,這不允許我編輯/更新條目(例如,如果我只想更改display_name - 請參閱下面的models.py)。在App Engine上使用djangoforms進行唯一值驗證
我提交使用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?請記住,我確實想阻止添加具有相同電子郵件地址的新數據存儲條目。
在此先感謝您的幫助!
你是絕對的英雄!太感謝了!這工作完美!偉大的瞭解self.changed_data :) – reallife
很高興我可以幫助:) – Spike