加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

django-admin – inlines -django

发布时间:2020-12-20 11:11:04 所属栏目:Python 来源:网络整理
导读:我有2个模型.我希望模型2与model1内联.在管理页面我想显示模型2的一些字段作为内联,所有这些都是readonly.ALso当我点击内联的值我应该使用该值将我链接到model2 一个内联,只显示字段.我想将内联模型字段显示为只读 解决方法 由于newforms管理员,这(通常)很容
我有2个模型.我希望模型2与model1内联.在管理页面我想显示模型2的一些字段作为内联,所有这些都是readonly.ALso当我点击内联的值我应该使用该值将我链接到model2

一个内联,只显示字段.我想将内联模型字段显示为只读

解决方法

由于newforms管理员,这(通常)很容易做到.基本上,您需要创建自定义内联子类并覆盖用于在管理中呈现它的模板.假设您有一个名为app的应用程序并模型Model1和Model2,您将执行以下操作:

首先,创建您的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>

接下来,将您的应用程序添加到settings.py中的INSTALLED_APPS – 不要忘记添加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会使url反转成为可能,只会在django 1.1之后发挥作用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读