2010-11-15 6 views
1

Newbie question. Pylônes 1 + SQLA utilisant un style déclaratif. Nouveau sur Python.Pylônes + SQLA: relation un à un

J'ai une classe "master" appelée Entity, dont les classes "child" doivent appartenir pour qu'elles soient valides. Mon lien vers la classe principale est au niveau de l'objet enfant. Mon problème est que je n'arrive pas à comprendre comment créer un objet enfant et créer un objet maître ainsi que créer le lien entre les objets. Je fais usage de relations pour le lien.

Ainsi, je voudrais créer un ono sur un lien ci-dessous: entité 1 - Client 1 Entité 2 - Client 2 Entité 3 - Producteur 1 Entité 4 - Producteur 2 etc.

Le le code pourrait mieux expliquer.

class Entity(Base): 
    __tablename__ = "entities" 
    # Primary Key 
    entity_id = Column(Integer, primary_key=True) 
    # Data Fields 
    name = Column(Unicode(255), nullable=False) 
    def __init__(self, name, description): 
     self.name = name 
    def __unicode__(self): 
     return self.name 
    __str__ = __unicode__ 

class Client(Base): 
    __tablename__ = "clients" 
    client_id = Column(Integer, primary_key=True) 
    # Data fields 
    name = Column(UnicodeText(255), nullable=False, unique=True) 
    # Entity Link 
    entity_id = Column(Integer, ForeignKey('entities.entity_id')) 
    # Mapper 
    entity = relation('Entity') 
    def __init__(self, name): 
     self.name = name 
    def __unicode__(self): 
     return self.name 
    __str__ = __unicode__ 

Dans le contrôleur, j'essaie de créer un nouveau client et de l'ajouter à une entité, ce qui échoue lamentablement. Veuillez coder ci-dessous. Maintenant, selon moi, cela devrait être possible et j'espère que quelqu'un peut aider car je suis à mon esprit.

Répondre

0

Est-ce que cela a du sens?

class Entity(Base): 
    __tablename__ = "entities" 
    # Primary Key 
    entity_id = Column(Integer, primary_key=True) 
    # Data Fields 
    name  = Column(Unicode(255), nullable=False) 

    def __init__(self, name, description): 
     self.name   = name 

    def __unicode__(self): 
     return self.name 
    __str__ = __unicode__ 

class Client(Base): 
    __tablename__ = "clients" 
    client_id = Column(Integer, primary_key=True) 
    name  = Column(UnicodeText()) 
    entity_id = Column(Integer, ForeignKey('entities.entity_id')) 
    # Mapper 
    entity = relation('Entity', uselist=False, backref='clients') 

    def __init__(self, name): 
     self.name = name 

    def __unicode__(self): 
     return self.name 
    __str__ = __unicode__ 



client_name="ClientName" 
entitiy_name="EntityName" 

client = Client(name=client_name) 
client.entity=Entity(name=entitiy_name, description=entitiy_name + " added") 

Je pense que "uselist=False" est utile si vous utilisez OneToOne.

+0

Cela a du sens, je vais essayer. –

Questions connexes