我有一个巨大的Django项目正在调整。我需要有一个下拉字段,该字段会自动填充管理页面中的其他两个只读字段。我希望这样做而不保存或刷新页面。我希望能够在更改下拉选项时看到只读字段立即更改。
现在,我有了下拉菜单,并且两个只读字段都在工作,但不是立即开始。保存后,只读字段只会更新以匹配下拉列表,然后再次打开该实例。我是通过覆盖save方法来做到这一点的:
def save(self, *args, **kwargs):
self.firstname = self.fullname.split()[0]
self.lastname = self.fullname.split()[1]
super().save(*args, **kwargs)
我知道有一个可以执行此操作的javascript onchange策略,关于如何将其应用于Django框架以使其按预期运行,我感到有些困惑。任何帮助将不胜感激。
更新: 我想我明白了。在位于contrib / admin / templates / admin中的change_form.html中,可以将javascript添加到after_field_sets块中,以便首先添加字段,然后可以使用其ID对其进行操作,可以通过打开它们的ID来对其进行操作。页面上的开发人员视图。 我仍然需要测试和调试,但是这段代码似乎可以正常工作:
<script type="text/javascript">
document.getElementById("id_firstname").readOnly = true;
document.getElementById("id_lastname").readOnly = true;
(function($){
$("select").change(function(){
document.getElementById("id_firstname").value = document.getElementById("id_fullname").value.split(" ")[0]
document.getElementById("id_lastname").value = document.getElementById("id_fullname").value.split(" ")[1]
}).change();
})(django.jQuery);
</script>
注意:您需要将已编辑的change_form.html的副本放入templates / admin / your-app / your-model中,并且Django框架将使用此版本的change_form.html作为特定版本的原始版本的替代您在文件夹结构中指定的模型。