2009-05-21 84 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