在管理面板,我創建的形式添加產品。表單包含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