动态(JS / Ajax)字段更新与Django管理界面

时间:2011-06-15 02:50:10

标签: python django database-design models

这可能是一个复杂的解释。在这里。

此问题的范围有两个模型AssetAssetGroupAssetGroup包含有关“资产组”的信息(例如品牌,型号,规格),Asset包含个人资产信息(例如费用,购买日期,购买理由,资产组)。

显然,两个模型之间存在关系(例如,资产属于某个'组')。

因此,该公司的一个人使用Django的管理界面将数据添加到数据库中,他们必须为其资产选择一个组。资产组的选择框显示每个资产组的__unicode__方法(当然),我使用的__unicode__方法是资产组品牌,型号和子级的串联-model:

def __unicode__(self):
    return self.asset_brand + " " + self.asset_product + " - " + self.asset_subproduct

很容易。

现在,AssetGroup表中有多个条目最终会输出相同的__unicode__方法输出,例如有两个项目:

  • asset_brand = 'Apple'
  • asset_product = 'Macbook Pro'
  • asset_subproduct = 'Mid-2009'

所以它们看起来完全一样。它们首先是单独条目的原因是因为AssetGroup中有一个名为asset_description的字段,其中包含有关AssetGroup的其他信息(例如第一个Macbook Pro {{1} object可能有4GB的RAM,而第二个AssetGroup对象可能有8GB的RAM。

因此,当客户端将资产输入数据库时​​,显然有两种不同的产品在选择框中看起来相同。我想(动态地,使用JS)在客户端向数据库输入AssetGroup时向客户端显示选定的AssetGroup asset_description

Django有什么可以做到的吗?如果没有,我想我可以重新设计我的数据库,但我真的不想。

1 个答案:

答案 0 :(得分:2)

您可以自定义Django管理员为您的特定型号使用的模板。您不必编写整个模板,相反,您可以在{%block extrahead%}模板标记内添加所需的一堆javascript。并使用jQuery设置您的事件处理。 Django在django.jQuery下的管理界面中使用jQuery。

为了让django找到您的自定义模板,您必须将它放在正确的位置。 请在此处查看自定义管理模板部分:http://www.djangobook.com/en/1.0/chapter17/

这是一个简短的例子:

{% block extrahead %}

<script type="text/javascript" src="{{ ADMIN_MEDIA_PREFIX }}jquery.min.js"></script>

<script type="text/javascript">
  django.jQuery(function($) {
    // set your handlers, etc.
  });
</script>
{% endblock %}