0
考慮這些僞模式:清潔內聯實例
class Category(models.Model):
name = models.CharField()
class Product(models.Model):
name = models.CharField()
code = models.CharField()
category = models.ForeignKey(Category)
price = models.DecimalField()
stock = models.IntegerField()
class AlternativeProduct(Product):
original_product = models.ForeignKey(Product, related_name="alternative", editable=False)
我想用內聯,以便能夠快速添加產品及其替代方案,而無需輸入重複的數據(唯一的代碼,股票和價格分化)。
admin.py
class AlternativeProductInline(admin.TabularInline):
model = AlternativeProduct
formset = AlternativeProductInlineFormset
fk_name = "original_product"
fields = ["code", "price", "in_stock"]
max_num = 1
extra = 0
class ProductAdmin(admin.ModelAdmin):
form = ProductAdminForm
inlines = [AlternativeProductInline]
Ofcourse,這將提高ValidationError
,因爲AlternativeProduct
缺少category
。
現在我可以設置一個默認值來解決這個問題:
class Product(models.Model):
name = models.CharField()
code = models.CharField()
category = models.ForeignKey(Category, default=1)
price = models.DecimalField()
stock = models.IntegerField()
但除了這個事實這個ID可能不存在,仍然需要加以糾正。是否有任何其他方式(除了使用Javascript)的真正產品的類別值複製到備用聯機產品「引擎蓋下」
我曾試圖改變admin_view,但它得到的hackish,也許自定義視圖將是一個不錯的解決方案,儘管JavaScript是一個不太耗時的方法。
我對你的代碼片段有點困惑,特別是'models.py'。你確定在翻譯「僞」模型時沒有遺漏任何東西嗎?特別是,您可以參考'AlternativeProduct'上的字段,這些字段似乎不存在。 – supervacuo 2012-08-06 13:56:13
對不起,錯字,AlternativeProduct派生自產品 – 2012-08-06 14:05:20
'Product'和'AlternativeProduct'有什麼區別?現在看來,他們似乎不應該是兩個單獨的模型。 – 2012-08-06 14:45:15