清理内联实例

2024-10-03 21:34:46 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑这些伪模型:

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)

我想使用内联线,以便能够快速添加一个产品及其替代选项,而不必键入重复的数据(只有代码,股票和价格)。你知道吗

管理员.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\ u视图,但它有点不成熟,也许自定义视图是一个很好的解决方案,尽管javascript是一种耗时较少的方法。你知道吗


Tags: namemodeladmin产品modelsstockcodeproduct
1条回答
网友
1楼 · 发布于 2024-10-03 21:34:46

Javascript似乎是实现这一点的简单方法。你知道吗

$(document).ready(function(){
    $('#alternative-group thead th:nth-child(2)').hide();
    $('#alternative-group tbody td:nth-child(1) p').hide();
    $('#alternative-group tbody td:nth-child(3)').hide();
    $('#id_alternative-0-category').hide();

    var product_category = $('#id_category option:selected').val();
    $('#id_alternative-0-category').val(product_category);

    $("#id_category").change(function() {
        product_category = $('#id_category option:selected').val();
        $('#id_alternative-0-category').val(product_category);
    });
});

相关问题 更多 >