2009-06-02 4 views
5

In einer klassischen relationalen Datenbank, ich habe die folgende Tabelle:rekursive Beziehung mit Google App Engine und BigTable

CREATE TABLE Person(
    Id int IDENTITY(1,1) NOT NULL PRIMARY KEY, 
    MotherId int NOT NULL REFERENCES Person(Id), 
    FatherId int NOT NULL REFERENCES Person(Id), 
    FirstName nvarchar(255)) 

Ich versuche, diese Tabelle in eine Google App Engine Tabelle zu konvertieren. Mein Problem ist mit den Feldern MotherId und FatherId. Ich habe den folgenden Code ausprobiert, aber keine Chance. Python sagt, dass es den Objekttyp Person nicht kennt.

class Person(db.Model): 
    mother = db.ReferenceProperty(Person) 
    father = db.ReferenceProperty(Person) 
    firstName = db.StringProperty() 

Weiß jemand, wie wir eine rekursive Beziehung in einer Google App Engine-Tabelle modellieren können? Wie kann ich die Einschränkungen von App Engine umgehen?

UPDATE Ich möchte das Problem ein wenig erweitern ... Was, wenn ich eine Sammlung von Kindern hinzufügen wollte?

children = db.SelfReferenceProperty(collection_name='children_set') 
dad.children.append(childrenOne) 

Ich habe das versucht und es funktioniert nicht. Irgendeine Idee, was ich falsch mache?

Danke!

Antwort

10

Ich denke, dass Sie SelfReferenceProperty hier

class Person(db.Model): 
    mother = db.SelfReferenceProperty(collection_name='mother_set') 
    father = db.SelfReferenceProperty(collection_name='father_set') 
    firstName = db.StringProperty() 

Alternativ möchten, können Sie die Mutter und Vater Beziehungen in getrennten Klassen setzen können.

+1

Sie werden auch die collection_name Eigenschaft festlegen müssen die 'Klasse Person bereits hat die Eigenschaft person_set' Fehler zu vermeiden: Mutter = db.SelfReferenceProperty (collection_name = 'mother_set') Vater = db.SelfReferenceProperty (collection_name =‘ vater_set ') – robertc

+0

Das wusste ich nicht. Bearbeitet, danke :) – NicDumZ

+0

Das ist wirklich cool! Ich wusste nichts davon. Wie könnte ich eine Sammlung von Kindern modellieren? Kinder = db.SelfReferenceProperty (collection_name = 'children_set') dad.children.append (childrenOne) habe ich versucht, diese und es funktioniert nicht. :( – Martin