如何使下拉列表自动填充Django中的其他字段

时间:2019-07-01 20:36:49

标签: javascript python django django-models django-forms

我有一个巨大的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作为特定版本的原始版本的替代您在文件夹结构中指定的模型。

0 个答案:

没有答案