【问题标题】:How to use Custom JS with Django inline如何在 Django 内联中使用自定义 JS
【发布时间】:2011-04-16 15:46:56
【问题描述】:

我有内联的 Django 应用程序:

class Account(models.Model):
    ContractNum = models.PositiveIntegerField(unique=True, blank=True, null=True)
    LastName = models.CharField(max_length=50,)
    FirstName = models.CharField(max_length=50, )

class Subscription(models.Model):
    Account = models.ForeignKey(Account, related_name='AccountLine')
    IpAddress = models.IPAddressField(unique=True, default=getFreeIP)
    MacAddress = MACAddressField() 
    Switch = models.ForeignKey(Switch, related_name='SwitchAccounts')
    Port = models.ForeignKey(Port )

在管理界面中,我有 Account 类的内联。结果,我生成了这样的 HTML:

              <td class="Switch">
                  <select name="AccountLine-0-Switch" id="id_AccountLine-0-Switch">
<option value="">---------</option>
<option value="1">ds34/33-2</option>
<option value="8" selected="selected">ds34-1</option>
</select><a href="/admin/cmdb/switch/add/" class="add-another" id="add_id_AccountLine-0-Switch" onclick="return showAddAnotherPopup(this);"> <img src="/admin_media/img/admin/icon_addlink.gif" width="10" height="10" alt="Add one more"/></a>    
              </td>
              <td class="Port">
                  <select name="AccountLine-0-Port" id="id_AccountLine-0-Port">
<option value="">---------</option>
<option value="1">3com34:1</option>
<option value="161" selected="selected">ds34-1:1</option>
</select><a href="/admin/cmdb/port/add/" class="add-another" id="add_id_AccountLine-0-Port" onclick="return showAddAnotherPopup(this);"> <img src="/admin_media/img/admin/icon_addlink.gif" width="10" height="10" alt="Add one more"/></a>

我的 JavaScript 不太好,你能帮我根据选择的 Switch 选项框预填充端口选项框吗? 我已经做了什么: 创建了 JSON 查询和视图,它返回特定 swicth 的端口,我不知道如何处理内联字段的动态 id,以及如何在再添加一行时自动执行此操作? 提前感谢您的任何想法和帮助。

【问题讨论】:

    标签: javascript django inline admin


    【解决方案1】:

    我按照你的建议做了,在那篇文章中,它工作得很好,这是我制作的 JavaScript:

    $(document).ready(function() {
            $(".module").delegate("[id$=-Switch]", "change", function() {
                var row = $(this).attr("id").split('id_AccountLine-')[1].split("-Switch")[0];
                var switch_id = $(this).val();
            var json_url = "/admin/cmdb/switch_ports/"+switch_id+"/"
                $("#id_AccountLine-"+row+"-Port").html("");
            $.post("/admin/cmdb/switch_ports/"+switch_id+"/", { "func": "getNameAndTime" },
                    function(data){
                for ( var i = 0; i < data.length; i++) {
                    var onePort = "<option value=\""+data[i].pk+"\">"+data[i].fields.PortNum+"</option>";
                    $("#id_AccountLine-"+row+"-Port").append(onePort);
                }
                    }, "json");
            });
        });
    

    【讨论】:

    • 您应该接受这个答案或启发它的答案,这取决于它是否代表了那里解释的重大发展。接受答案很重要,因为它可以防止人们在扫描未回答的问题时浪费时间。让人们认可提供了有用的答案也很重要。此外,它还能让您看起来更好,并帮助您在未来获得答案。
    猜你喜欢
    • 1970-01-01
    • 2011-10-17
    • 2011-02-23
    • 2018-02-22
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 2012-03-08
    相关资源
    最近更新 更多