내 응용 프로그램에는 런타임시에만 열 수를 알고있는 모델이 있습니다. 아래의 Factory
과 같은 함수를 사용하여이 문제를 멋지게 해결할 수 있습니다.peewee : 동적으로 생성 된 모델 재사용
AttributeError: Foreign key: dynamictable.ref related name "dynamictable_set"
collision with foreign key using same related_name.
메시지는 매우 명확하고 나는 related_name
인수를 설정할 때 외래 키를 만들 때 : 내가 (잠재적으로 다양한 필드) 그것을 여러 번 사용하는 경우, 외부 키 ref
의 생성에서 예외가 발생합니다 오류가 없습니다.
질문 :
가 왜이 같은
related_name
두 번째로 사용할 수 없습니다?StaticTable
도 다시 정의해야합니까?동적 모델을 사용하여 여러 데이터베이스에 쓰기 더 나은 방법이 있습니까?
최소, 재현 할 예 :
import peewee
database_proxy = peewee.Proxy()
class BaseModel(peewee.Model):
class Meta:
database = database_proxy
class StaticTable(BaseModel):
foo = peewee.DoubleField()
def Factory(fields):
class DynamicTable(BaseModel):
ref = peewee.ForeignKeyField(StaticTable)
for field in fields:
peewee.DoubleField().add_to_class(DynamicTable, field)
return DynamicTable
def Test(fname, fields):
db = peewee.SqliteDatabase(fname)
database_proxy.initialize(db)
db.create_table(StaticTable)
dyntable = Factory(fields)
db.create_table(dyntable)
db.close()
Test(':memory:', ['foo', 'bar'])
Test(':memory:', ['foo', 'bar', 'extra'])
빠른 답장을 보내 주셔서 감사합니다. 내 질문에 나는 일부 데이터베이스에 대해 동일한 필드가있을 수 있으므로 필드를 문자열에 조인하는 것이 고유하지 않음을 언급하는 것을 잊어 버렸다. 나는 해결 방법을 찾았지만, 나는 별도의 답변으로 게시 할 것이다. – hitzg
확실히, 나는 단지 당신이 어떻게 주위를 둘러 쌀 수 있는지에 대한 예로서 그것을 제공했다. – coleifer