【发布时间】:2014-03-13 12:35:44
【问题描述】:
我的 Django 应用程序有一堆不同的 Widget 模型类。它们都继承自抽象模型BaseWidget,尽管它们有很多不同,但它们有一些共同的字段(例如price、name 等)。我还有一个Package 模型,它旨在表示一个有序的小部件集合(可能来自不同的类)以及一些元数据。这是一个示例包:
[<FooWidget: 4>, <BarWidget: 1>, <BarWidget: 5>, <BangWidget: 1>]
一个示例任务是总结一个包中所有小部件的price,或者以正确的顺序打印一个小部件列表。
目前,我的实现是每个Widget 都有一个指向Package 的ForeignKey。 Package 有一个GenericForeignKey 到第一个Widget,称为first_widget,每个Widget 都有一个GenericForeignKey,称为next_widget。为了遍历包的小部件,我遵循 next_widget 关系,就像链表一样。这很慢,我正在寻找更好的方法。
我的一个想法是在Package 上有一个名为widget_tuples 的字段,它是(WidgetClass, pk) 元组的列表。如果我能找到一种有效的方法来将此 Python 数据结构序列化/反序列化到我的数据库(例如通过酸洗),那么我可以通过以下方式重建列表:
widgets = [WidgetClass.objects.get(pk) for WidgetClass,pk in self.widget_tuples]
任何人都可以评论这种方法或指出更好的方向吗?
(顺便说一句,包中的小部件列表不会动态更改;即不添加或删除小部件。)
【问题讨论】:
-
你能发布你的模型吗?有时答案是通过更改基本模型来简化问题。
标签: python database django django-models foreign-keys