sqlalchemy宣言的なクラスの束に使用する予定の単純なミックスインを作成する際に問題があります。基本的なアイデアは、作成/変更タイムスタンプと複数のテーブルに格納されたユーザーの作成/変更をしたいということです。 mixinは独自のファイル(global_mixins.py)にあり、クラスはmixinを必要とする各モデルファイルにインポートされます。データのインポートを実行すると、コードの下にエラーが表示されます。sqlalchemy mixin、foreignkeyおよびrelation
class TimeUserMixin(object):
create_time = Column(DateTime,default=datetime.datetime.now,nullable=False)
modify_time = Column(DateTime,default=datetime.datetime.now,
onupdate=datetime.datetime.now,nullable=False)
@declared_attr
def create_user_id(cls):
return Column(Integer,ForeignKey('tg_user.user_id'),
default=cls.get_user_id,nullable=False)
@declared_attr
def modify_user_id(cls):
return Column(Integer,ForeignKey('tg_user.user_id'),
default=cls.get_user_id,onupdate=cls.get_user_id,nullable=False)
@declared_attr
def create_user(cls):
return relation('User',primaryjoin='%s.create_user_id == User.user_id'%cls.__name__)
@declared_attr
def modify_user(cls):
return relation('User',primaryjoin='%s.modify_user_id == User.user_id'%cls.__name__)
@classmethod
def get_user_id(cls):
#will eventually return user id if logged in or a generic system user.
return 1
Error(DETAIL: Key (create_user_id)=(1) is not present in table "tg_user".)
tg_user宣言はありませんか? – Bryan
あなたは何を意味するのかよく分かりません。 tg_userはテーブル名です。クラス名を使用してForeignKeyを設定する必要がありますか? ForeignKey( 'User.user_id')? – Ominus
クラス名ではなくテーブル名でなければなりません。しかし、私はtg_userテーブルのクラスが次のようにどこかで宣言されることを期待しました:http://pastebin.com/3VCAaxJT。それでは、私はミックスインを一度も使ったことがないので、私は純粋にこれらを読んで話しています:http://docs.sqlalchemy.org/en/latest/orm/extensions/declarative.html#mixing-in-relationships – Bryan