在管理面板,我创建的形式添加产品。表单包含2个内联表单,因为有些与产品相关的模型。用户可以创建产品,然后定义该产品的不同属性。我会举例说明这一点。用户拥有3种不同颜色的一个品牌的T恤,并希望以不同的价格添加它们。 T恤被创建为具有3种变体的产品。
class Detail(models.Model):
product = models.ForeignKey('Product')
attribute = models.ForeignKey('Attribute')
value = models.CharField(max_length=500)
class Attribute(models.Model):
name = models.CharField(max_length=300)
class Variant(models.Model):
product = models.ForeignKey(Product)
details = models.ManyToManyField(Detail)
quantity = models.IntegerField()
price = models.DecimalField(max_digits=6, decimal_places=2)
我省略了产品,因为它是无关紧要的。
class DetailInline(admin.TabularInline):
model = Detail
class VariantInline(admin.StackedInline):
model = Variant
class ProductAdmin(admin.ModelAdmin):
class Meta:
model = Product
inlines = [DetailInline, VariantInline]
这很好地工作,模型保存良好,我有一个问题与变体内联。变体内联显示详细对象,但只有已保存在数据库中的对象。为了让用户更容易生活,最好的方法是在创建Detail对象时将Detail对象添加到Variant inline中,因此它必须在保存Product之前发生。
- 有没有办法用值手动刷新内联?
- 是否有一个中期保存我可以用来创建明细对象但不是产品并返回结果?
- 模型应该重新设计? (我真的不想这样做,除非我必须这样做)
- 用户在添加产品时是否需要遵循不同的工作流程?
我试图通过使用js注入条目到内联,但这是hackish和Django没有验证与假值错误输入错误的值已被选中。
我写这个问题时脑海中浮现出的最后想法。可以创建js,以防万一Inline对象的内联形式被改变时会将数据传递给自定义视图,从而创建对象并返回结果。我看到的一个问题(在它旁边感觉不对)是如何通知django新对象创建的,因此它不会提出关于不存在的值的错误。
无论如何,我希望有人会理解这个长问题。
你绑详细到产品,而不是要变,对任何具体的原因? – 2013-02-25 07:10:09
是的,我。它用于通过js过滤数据。 – 2013-02-25 17:30:38