मुझे लगता है कि इस InlineAdmin
उपवर्ग में एक साधारण स्विच के साथ संभव नहीं है। लेकिन मैं के बारे में सोच सकते हैं एक छोटी सी "हैक" एक ही प्राप्त होता है कि:
अपने inlines रेंडर करने के लिए एक कस्टम टेम्पलेट निर्दिष्ट करने के लिए अपने InlineAdmin
पर template
विशेषता का उपयोग करें। अब उस मूल टेम्पलेट को कॉपी करें जिसे आप में अपने कस्टम टेम्पलेट में उपयोग करना चाहते हैं (उदा। django/contrib/admin/templates/admin/edit_inline/tabular.html
कॉपी करें)। स्रोत देखें और {% for inline_admin_form in inline_admin_formset %}
के साथ लाइन खोजें और इसके बाद {% if not inline_admin_form.original %}
डालें। {% endfor %}
टैग बंद होने से ठीक पहले {% endif %}
भी डालें।
यह विधि वास्तव में इनलाइन के आउटपुट को छुपाती है। तो पृष्ठ पर कच्चे POST डेटा को पास करके उन्हें संशोधित करने के लिए अभी भी संभव है, उदाहरण के लिए curl
(लेकिन "हमलावर" [पढ़ें: व्यवस्थापक उपयोगकर्ता ;-)] को django पता होना चाहिए और यह स्वरूपों में फ़ील्ड नाम उत्पन्न करता है) ।
tabular.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 }}</h2>
{{ inline_admin_formset.formset.non_form_errors }}
<table>
<thead><tr>
{% for field in inline_admin_formset.fields %}
{% if not field.is_hidden %}
<th {% if forloop.first %}colspan="2"{% endif %}>{{ field.label|capfirst }}</th>
{% endif %}
{% endfor %}
{% if inline_admin_formset.formset.can_delete %}<th>{% trans "Delete?" %}</th>{% endif %}
</tr></thead>
<tbody>
{% for inline_admin_form in inline_admin_formset %}
{% if not inline_admin_form.original %}
{% if inline_admin_form.form.non_field_errors %}
<tr><td colspan="{{ inline_admin_form.field_count }}">{{ inline_admin_form.form.non_field_errors }}</td></tr>
{% endif %}
<tr class="{% cycle row1,row2 %} {% if inline_admin_form.original or inline_admin_form.show_url %}has_original{% endif %}">
<td class="original">
{% if inline_admin_form.original or inline_admin_form.show_url %}<p>
{% if inline_admin_form.original %} {{ inline_admin_form.original }}{% endif %}
{% if inline_admin_form.show_url %}<a href="../../../r/{{ inline_admin_form.original_content_type_id }}/{{ inline_admin_form.original.id }}/">{% trans "View on site" %}</a>{% endif %}
</p>{% endif %}
{% if inline_admin_form.has_auto_field %}{{ inline_admin_form.pk_field.field }}{% endif %}
{{ inline_admin_form.fk_field.field }}
{% spaceless %}
{% for fieldset in inline_admin_form %}
{% for line in fieldset %}
{% for field in line %}
{% if field.is_hidden %} {{ field.field }} {% endif %}
{% endfor %}
{% endfor %}
{% endfor %}
{% endspaceless %}
</td>
{% for fieldset in inline_admin_form %}
{% for line in fieldset %}
{% for field in line %}
<td class="{{ field.field.name }}">
{{ field.field.errors.as_ul }}
{{ field.field }}
</td>
{% endfor %}
{% endfor %}
{% endfor %}
{% if inline_admin_formset.formset.can_delete %}
<td class="delete">{% if inline_admin_form.original %}{{ inline_admin_form.deletion_field.field }}{% endif %}</td>
{% endif %}
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
</fieldset>
</div>
{# <ul class="tools"> #}
{# <li><a class="add" href="">Add another {{ inline_admin_formset.opts.verbose_name|title }}</a></li> #}
{# </ul> #}
</div>
स्रोत
2010-01-19 20:54:11
मुझे लगता है कि अजगर कोड में यह करने के लिए क्लीनर तरीके, एक BaseInlineFormset उपवर्ग बनाकर होगा कि मौजूदा डेटा को कभी भी प्रदर्शित नहीं करता है और आपके व्यवस्थापक पर उचित विधि को ओवरराइड नहीं करता है। इसे अपने फॉर्मेट क्लास का उपयोग करने के लिए मॉडेलइनलाइन सबक्लास। –
हां, मैं सहमत हूं। मैंने इसके बारे में सोचा नहीं है। शायद मुझे फॉर्मेट्स के साथ कम अनुभव करना है। सबक्लास दृष्टिकोण बहुत साफ है और इतना "हैक" नहीं है। –