2011-06-15 118 views
1

这可能是一个复杂的解释。在这里。带Django管理界面的动态(JS/Ajax)字段更新

该问题的范围有两种型号,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)向客户端显示选定的AssetGroupasset_description,当他们在数据库中输入Asset时。

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

回答

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 %}