Я реализовал это следующим образом, переопределив метод put и используя key.name
class Program(db.Model):
name = db.StringProperty("Title")
slug = db.StringProperty("Slug")
def put(self):
if Program.get_by_key_name(self.slug):
raise UniqueConstraintViolation("slug", self.slug)
self._key_name = self.slug
return db.Model.put(self)
class UniqueConstraintViolation(Exception):
def __init__(self, scope, value):
super(UniqueConstraintViolation, self).__init__("Value '%s' is not unique within scope '%s'." % (value, scope, ))
Я сохраняю слаг как key.name и, если вы попытаетесь добавить другую программу, она проверит, существует ли имя ключа. Вероятно, это не очень хороший способ, я также новичок в python / app engine.
Это хорошая статья о ком-то, кто использует вспомогательную модель: http://squeeville.com/2009/01/30/add-a-unique-constraint-to-google-app-engine/
Редактировать: Я видел, что вы также предоставили эту статью LOL.