我正在尝试模仿 Django 的unique_together
功能,但我似乎无法理解
class MyClass(ndb.Model):
name = 'name'
surname = 'surname'
phone = 'phone'
def get_unique_key(self):
return self.name + "|" + self.surname + "|" + self.phone
“是的,很简单”不是
根据这篇文章中接受的答案,只需在 obj 构造函数中分配id
参数就足够了。但我不想在视图中处理它。理想情况下,我会这样做:
object = MyClass()
object = object.custom_populating_method(form.cleaned_data)
object.id = object.get_unique_key()
object.put()
或者更好的是,将其放在 a 中_pre_put_hook
,以便id
在保存之前将其设置为最后一件事(并且可能进行一些检查以强制执行数据存储中数据的唯一性)。
显然,我错了。实现这一点的唯一方法是破解视图:
unique_id = "|" + form.cleaned_data['bla'] + "|" + form.cleaned_data ...
object = MyClass(id=unique_id)
这是非常糟糕且完全错误的(因为模型要求的每一次更改都需要在视图中进行检查)。另外,我最终会做几个丑陋的调用来获取一些相关数据。我可能在这个问题上花了太多时间才能看到退出,我真的希望我在这里遗漏了一些明显的东西,但我真的找不到任何好的例子,也找不到围绕这个主题的适当文档。有没有人对类似的事情有任何提示或经验?
tl;博士:有没有一种很好的方法来实现这一点,而无需在我的视图中添加不必要的代码?
(我在 Datastore 上“使用”Django 和 ndb 的模型)
谢谢