我想解决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