unique_together
기능을 모방하기 위해 노력하고있어
를 사용하여 데이터 저장소에 고유성을 보장하지만 바로NDB 모델 : 사용자 정의 KEY_NAME
class MyClass(ndb.Model):
name = 'name'
surname = 'surname'
phone = 'phone'
def get_unique_key(self):
return self.name + "|" + self.surname + "|" + self.phone
"그래, 아주 쉽게"
을 그것을하지 얻이 수없는 것허용 된 답변 this post에 따르면 obj 생성자에서 id
매개 변수를 지정하기 만하면됩니다. 그러나 저는 그것을보기에 다루기를 원하지 않습니다. 이상적으로, 나는이 작업을 수행 할 것 다음 id
저장하기 전에 같은 마지막 설정 (그리고 아마도에서 데이터의 고유성을 시행하는 몇 가지 검사를 할 것입니다 수 있도록 더 나은
object = MyClass()
object = object.custom_populating_method(form.cleaned_data)
object.id = object.get_unique_key()
object.put()
또는를하는 _pre_put_hook
에 그것을 배치 데이터 저장소).
분명히, 나는 틀 렸습니다. 이것을 달성하는 유일한 방법은보기를 해킹하는 것입니다 : 끔찍한와 (모델의 요구 사항에 대한 모든 변화의 의견도 검사 할 필요가 있기 때문에) 완전히 잘못
unique_id = "|" + form.cleaned_data['bla'] + "|" + form.cleaned_data ...
object = MyClass(id=unique_id)
. 게다가, 나는 몇 가지 관련 데이터를 가져 오기 위해 몇 가지 못생긴 호출을 끝낼 것입니다. 출구를보기 위해이 문제에 너무 많은 시간을 할애하여 실제로 여기에서 뭔가 분명한 것을 놓치기를 바랍니다. 그러나이 주제와 관련된 좋은 예나 적절한 문서를 찾을 수 없습니다. 어떤 힌트 또는 비슷한 경험을 가진 사람이 있습니까?
tl; dr : 내보기에 불필요한 코드를 추가하지 않고도이를 달성 할 수있는 좋은 방법이 있습니까?
덕분에 난 당신이 전체 key
를 할당하는 경우 당신이 그것을 할 수 있다고 생각
나만의 생성자를 구현해 보셨습니까? – dragonx
잘 난 성공하지 않고 내 자신의 __init__ 메서드 (슈퍼 생성자를 호출하거나하지 않고)를 구현하려고 시도했습니다. –
실제로 무엇을하고 있는지 알지 못하는 한 init을 재정의하고 싶지 않습니다. 엔터티를 만들기 전에 팩토리 (클래스 메서드)를 사용하여 키를 만드는 엔터티를 만듭니다. 예를 들어 타격을 참조하십시오. –