Question

Newbie question. Pylons 1 + SQLA en utilisant le style déclaratif. Nouveau sur Python.

J'ai une classe « maître » appelée entité qui classe « enfant » doivent appartenir à leur soient valides. Mon lien vers la classe principale est au niveau de l'objet enfant. Mon problème est que je ne peux pas à comprendre comment on crée un objet enfant et créer un objet maître ainsi que de créer le lien entre les objets. Je utilise des relations pour la liaison.

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 code pourrait expliquer mieux.

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 je tente de créer un nouveau client et l'ajouter une entité, qui échoue lamentablement. S'il vous plaît le code ci-dessous.

            client_entity = model.Entity(name=client_name, description=client_name + " added")
            client = model.Client(name=client_name)
            client.entity.append(client_entity)
            Session.add(client)
            Session.commit()

Or, selon moi, cela devrait être possible et j'espère que quelqu'un peut aider comme je suis à mon esprit fin.

Était-ce utile?

La solution

Est-ce que ce 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top