2009-05-21 69 views
3

我有2个models.i想要model2与model1内联。在管理页面上,我想显示模型2的一些领域作为内联和所有他们只读。当我点击内联的价值,我应该联系我的MODEL2与价值inline -django

一个内嵌的是只读的显示领域。我想显示为只读

回答

7

这是联模型领域(主要是)很容易做到,谢谢到newforms admin。基本上,您需要创建一个自定义的内联子类并覆盖用于在管理中呈现它的模板。假设你有一个名为app和模型Model1Model2的应用,您需要做到以下几点:

首先,创建admin.py文件:

from django.contrib import admin 
from app.models import Model1, Model2 

class Model2Admin(admin.ModelAdmin): 
    list_display = (...) 

class Model2Inline(admin.TabularInline): 
    model = Model2 
    extra = 0 
    template = 'admin/app/model2/inline.html' 

class Model1Admin(admin.ModelAdmin): 
    list_display = (...) 
    inlines = (Model2Inline,) 

admin.site.register(Model1, Model1Admin) 
admin.site.register(Model2, Model2Admin) 

然后,在admin/app/model2创建inline.html模板:

{% load i18n %} 
<div class="inline-group"> 
    <div class="tabular inline-related {% if forloop.last %}last-related{% endif %}"> 
    {{ inline_admin_formset.formset.management_form }} 
    <fieldset class="module"> 
     <h2>{{ inline_admin_formset.opts.verbose_name_plural|capfirst|escape }}</h2> 
     {{ inline_admin_formset.formset.non_form_errors }} 
     <table> 
     <thead> 
      <tr> 
      <th colspan="2">Field1</th> 
      <th>Field2</th> 
      <th>Field3</th> 
      </tr> 
     </thead> 

     {% for inline_admin_form in inline_admin_formset %} 
      <tr class="{% cycle row1,row2 %}"> 
      <td class="original"> 
       <!-- Render all form fields as hidden fields: --> 
       {{ inline_admin_form.pk_field.field }} 
       {% spaceless %} 
       {% for fieldset in inline_admin_form %} 
       {% for line in fieldset %} 
        {% for field in line %} 
        {{ field.field.as_hidden }} 
        {% endfor %} 
       {% endfor %} 
       {% endfor %} 
       {% endspaceless %} 
      </td> 

      <!-- then display just the values of the fields you're interested in: --> 
      <td class="field1"> 
       <!-- Make this a link to the change detail page for this object: --> 
       <a href="{% url admin:app_model2_change inline_admin_form.original.pk %}">{{ inline_admin_form.original.field1 }}</a> 
      </td> 
      <td class="field2"> 
       {{ inline_admin_form.original.field2 }} 
      </td> 
      <td class="field3"> 
       {{ inline_admin_form.original.field3 }} 
      </td> 
     </tr> 
     {% endfor %} 
     </table> 
    </fieldset> 
    </div> 
</div> 

接下来,将您的应用程序添加到INSTALLED_APPSsettings.py - 不要忘记添加django.contrib.admin也:)。

最后,编辑你的根urls.py包括下面几行:

from django.conf.urls.defaults import * 
from django.contrib import admin 

admin.autodiscover() 

urlpatterns = patterns('', 
    ... 
    (r'^admin/', include(admin.site.urls)) 
) 

应该这样做。请注意,admin.site.urls,这使得网址逆转成为可能,只会在django 1.1后发布。

+0

不是我正在寻找,但非常酷。我必须将其添加到我的技巧书中。 – 2009-08-14 00:01:05