模型和管理员类
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。
我该怎么做? 如何检测选择表格中的变化并对其做出反应?
答案 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.');
});
});
});