这可能是一个复杂的解释。来了

在此问题的范围内,有两个模型AssetAssetGroupAssetGroup包含有关资产“组”的信息(例如品牌,型号,规格),而Asset包含单个资产信息(例如成本,购买日期,购买原因,资产组)。

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

因此,这家公司的一个人要使用Django的管理界面将产品添加到数据库中,并且他们必须选择一个资产所属的组。资产组的选择框显示每个资产组的__unicode__方法(当然),而我正在使用的__unicode__方法是资产组品牌,模型和子模型的串联:

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 AssetGroup对象可能具有4GB的RAM,并且第二个AssetGroup对象可能具有8GB的RAM。

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

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

最佳答案

您可以自定义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 %}

10-05 22:52