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