django InlineAdmin:选择更改后填充字段值(ForeignKey)

时间:2015-11-10 15:02:45

标签: django django-admin

模型和管理员类

class ListItem(models.Model):
        quantity = models.IntegerField(default=1)
        isKleinmenge = models.BooleanField(default=False)
        product = select2.fields.ForeignKey(ProductVariant, blank=True, null=True, overlay="Produkt...")
        sortOrder = models.PositiveIntegerField(default=0, blank=False, null=False)

        invoicePrice = models.FloatField(default=0)
        invoiceText = models.TextField(default="", blank=True, null=True)

我在发票上使用该模型作为内联。

class ProductsInline(SortableInlineAdminMixin, admin.TabularInline):
        model = ListItem

在我的发票上

class InvoiceAdmin(DjangoObjectActions, admin.ModelAdmin):
    inlines = [ ProductsInline, ]

问题 在djangoAdmin中:当通过Dropdown(在ListItem内联元素中)选择产品时,我想将所选产品中的文本/值复制到“invoiceText”和“invoicePrice”。

想法是,最终用户可以在需要/必须时更正invoiceText和invoicePrice。

我该怎么做? 如何检测选择表格中的变化并对其做出反应?

2 个答案:

答案 0 :(得分:1)

一种解决方案可以使用jquery

add jquery to product admin :

class InvoiceAdmin(DjangoObjectActions, admin.ModelAdmin):
inlines = [ ProductsInline, ]
class Media:
    js = (
        '//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js', # jquery
        'my_script.js'
    )

my_script.js

$("select#product").change(function() {
    // do what ever you want
});

答案 1 :(得分:1)

除了哈桑的正确答案: 我实际上(python3-django 2.2.3)的问题是我的jquery部分没有运行,因为文档没有完全加载。我发现,django在文档完成加载之前加载了my_script.js,并且由于选择元素随后加载而无法正常工作。因此,首先检查$(document).ready()是可行的:

$(document).ready(function(jQuery) {
    jQuery(function($) {
        $('select#id_product').on('change', function() {
            alert('product selection changed.');
        });
    });
});
相关问题