我想解決Django中與模型繼承有關的問題。我有四個相關機型:Order
,OrderItem
具有ForeignKey的到Order
再有就是Orderable
模式,即模型繼承父兒童模型,如Fee
,RentedProduct
等。在蟒蛇,它是這樣的(僅發佈相關部分):Django內嵌模型繼承目標
class Orderable(models.Model):
real_content_type = models.ForeignKey(ContentType, editable=False)
objects = OrderableManager()
available_types = []
def save(self, *args, **kwargs):
"""
Saves instance and stores information about concrete class.
"""
self.real_content_type = ContentType.objects.get_for_model(type(self))
super(Orderable, self).save(*args, **kwargs)
def cast(self):
"""
Casts instance to the most concrete class in inheritance hierarchy possible.
"""
return self.real_content_type.get_object_for_this_type(pk=self.pk)
@staticmethod
def register_type(type):
Orderable.available_types.append(type)
@staticmethod
def get_types():
return Orderable.available_types
class RentedProduct(Orderable):
"""
Represent a product which is rented to be part of an order
"""
start_at = models.ForeignKey(Storage, related_name='starting_products',
verbose_name=_('Start at'))
real_start_at = models.ForeignKey(Storage, null=True,
related_name='real_starting_products', verbose_name=_('Real start at'))
finish_at = models.ForeignKey(Storage, related_name='finishing_products',
verbose_name=_('Finish at'))
real_finish_at = models.ForeignKey(Storage, null=True,
related_name='real_finishing_products', verbose_name=_('Real finish at'))
target = models.ForeignKey(Product, verbose_name=_('Product'))
Orderable.register_type(RentedProduct)
class OrderItem(BaseItem):
unit_price = models.DecimalField(max_digits=8, decimal_places=2,
verbose_name=_('Unit price'))
count = models.PositiveIntegerField(default=0, verbose_name=_('Count'))
order = models.ForeignKey('Order', related_name='items',
verbose_name=_('Order'))
discounts = models.ManyToManyField(DiscountDescription,
related_name='order_items', through=OrderItemDiscounts, blank=True,
verbose_name=_('Discounts'))
target = models.ForeignKey(Orderable, related_name='ordered_items',
verbose_name=_('Target'))
class Meta:
unique_together = ('order', 'target')
我想要一個內聯綁定到Order模型來啓用編輯OrderItems。問題是,OrderItem中的目標字段指向Orderable(不是通過調用Orderable的cast
方法可以獲得的具體類),因此內聯中的表單不完整。
有沒有人有一個想法,如何爲此創建至少一個用戶友好的界面?它可以通過Django admin inline解決,或者你會建議創建特殊的用戶界面?
在此先感謝您的任何提示。
嗨,因爲在你之前似乎沒有人回答過這個問題,所以我親自選擇了通過特殊界面的方式。試圖通過內聯鍛造這件事情對我所需要完成的事情來說太困難了。儘管如此,請看看FeinCMS解決方案。謝謝 ;) – xaralis 2011-01-07 08:29:47