Używam silnika aplikacji Google z django 1.0.2 (i django-helper) i zastanawiam się, jak ludzie robią rekursywne usuwanie. Załóżmy, że masz model, który jest mniej więcej tak:Kasowanie cykliczne w silniku aplikacji Google
class Top(BaseModel): pass class Bottom(BaseModel): daddy = db.ReferenceProperty(Top)
Teraz, kiedy mogę usunąć obiekt typu „top”, chcę wszystkie związane „bottom” obiekty mają być usunięte.
Teraz, gdy usuwam obiekt "górny", obiekty "na dole" zostają, a następnie dostaję dane, które nigdzie nie należą. Po wejściu do magazynu danych w widoku, I skończyć z:
Caught an exception while rendering: ReferenceProperty failed to be resolved.
Mogłem oczywiście znaleźć wszystkie obiekty i usunąć je, ale ponieważ mój prawdziwy model jest o głębokości co najmniej 5 poziomów, mam nadzieję, że to sposób aby upewnić się, że można to zrobić automatycznie.
Znalazłem ten article o tym, jak to działa z Javą i to wydaje się być tym, czego również chcę.
Ktoś wie, jak mogę uzyskać to zachowanie również w django?
W interesie, czy db.delete call delete() na każdym obiekcie? Jest diabelnie zoptymalizowany, więc jestem trochę podejrzliwy, że nie możesz połączyć tych dwóch sztuczek. Jednak dobry punkt na keys_only. –
Nie, db.delete() bezpośrednio odpowiada pojedynczemu wywoływaniu, które wysyła równolegle wszystkie klucze, które mają zostać usunięte. Entity.delete() to po prostu syntaktyczny cukier, który wywołuje db.delete (self). –
Czy "db.delete (top.bottom_set)" nie działałby poprawnie? –