2015-03-23 1 views
0

Nous essayons de faire quelque chose comme ceci: Paradigm est une base "abstraite" (dans la terminologie de Django), qui ne contient que des champs communs à tous les paradigmes. Il doit avoir une clé étrangère (précisément, deux d'entre eux) à Person, mais Person est un Paradigm, déclaré plus tard (dans un fichier séparé, pair). Est-ce même possible en utilisant l'API déclarative? Je sais comment construire une classe ayant une clé étrangère à elle-même, mais le problème est que cela dépend d'une classe: Personne doit avoir deux clés étrangères à elle-même, alors qu'une autre sous-classe de declarative_base (cls = Paradigm) doit avoir deux clés étrangères non pas à elle-même, mais à la personne.Clé étrangère à une classe non encore définie dans SQL Alchemy

Répondre

0

Oui, vous pouvez. Lisez la documentation ForeignKey:

A single target column for the key relationship. A Column object or a column name as a string.

Vous pouvez donc se référer à une autre table:

user_id = Column(Integer, ForeignKey('users.id')) 

Il existe de nombreux exemples dans le Object Relational Tutorial ainsi.

+0

Hm ... bien sûr, c'était l'une des premières choses que j'ai essayées. Mais je reçois une erreur "sqlalchemy.exc.InvalidRequestError: Les colonnes avec des clés étrangères à d'autres colonnes doivent être déclarées comme attr callables sur les classes déclaratives mixin", ce qui, pour être honnête, je ne comprends pas vraiment. Je pensais que cela signifiait que cela ne pouvait pas être fait, mais maintenant, il semble que cela signifie quelque chose de complètement différent. : -/ – Veky

+0

Un exemple de code qui produit votre erreur serait utile. Jetez également un coup d'œil à la documentation [Mixing in Relationships] (http://docs.sqlalchemy.org/en/rel_0_9/orm/extensions/declarative/mixins.html#mixing-in-relationships), qui explique la cause de l'erreur vous obtenez si vous mélangez des clés/relations étrangères. – van

+0

Oui, cela aurait aidé si je savais que j'écrivais des mixins. :-D Qu'est-ce qui détermine si la classe de base est un mixin? Juste sa place dans les bases tuple (la première est la base réelle, les autres sont les mixins)? – Veky