我一直試圖找出一段時間,現在取得一點成功。我試圖寫一個類工廠,起着很好的Django的ORM,這樣我就可以採取這樣的模型模式:在Django創建一個智能類工廠
Product
SubclassOfProduct0
SubclassOfProduct1
....
要像這樣工作:
Product.objects.get(pk=7) // returns the result of SubclassOfProduct0(pk=7)
Product.objects.filter(propname="w00t") // returns a QuerySet of Product objects
所以我就在想這樣的事情:
class ProductManager(models.Manager):
def get(self, *a, **kwa):
# Get the id from Products (somehow)
if product.type == Product.TYPE_SUBCLASS0:
return ProductSubClass0.objects.get(pk=kwa["pk"])
class Product(models.Model):
TYPE_SUBCLASS0 = 0
TYPE_SUBCLASS1 = 1
objects = ProductManager()
def __init__(self, *a, **kwa):
self.set_defaults()
def set_defaults(self):
pass
class ProductSubClass0(models.Model):
def set_defaults(self):
self.type == self.TYPE_SUBCLASS0
...但我不知道如何做到「正確」。有人可以在這裏發光嗎?
不要這樣做。你不需要寫一個工廠。只需創建層次結構並通過ORM創建對象。 – 2011-03-08 11:19:17
通常情況下,我會同意,但如果我不這樣做,它會迫使我在我需要有關對象的其他信息並且只有該ID時將這種邏輯放在我的視圖中。例如,在REST調用中,用戶提供pk = 7,我必須返回ProductSubClass的一個實例。 – 2011-03-08 11:42:54
ProductSubClass與Product類具有相同的字段嗎? – 2011-03-08 13:14:10