これらの疑似モデルを検討してください。
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]
もちろん、これは発生します。これは、が欠落している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を変更しようとしましたが、ハックになります。javascriptの方が時間のかからないアプローチですが、おそらくカスタムビューが良い解決策になるでしょう。