मैं एक काफी का निर्माण किया है
fieldsets = (
(None, {
'fields': (
('inline_images',)
('thumbnail_image',),
('inline_authors',)
('title', 'is_active', 'order',)
),
}),
)
readonly_fields = ('inline_images', 'inline_authors')
inline_images = '<span id='replaceme inline_images'></span>'
inline_images.allow_tags = True
inline_authors = '<span id='replaceme inline_authors'></span>'
inline_authors.allow_tags = True
एक और बात वहाँ inlines के इस स्थिति के लिए पूछ एक खुला Django मुद्दा है सामान्य समाधान ...
अपने admin.py में अपने इनलाइन करने के लिए एक नए क्षेत्र जोड़ें:
class YourModelInline(admin.TabularInline):
model = YourModel
after_field = "fieldname_of_field_before_inline"
फिर AdminClas की render_change_form अनुकूलित मॉडल के रों कि इनलाइन रखती है:
class EditModelAdmin(model.ModelAdmin):
inlines = [YourModelInline,]
def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None):
sorted_inline_formsets = {}
inline_admin_formsets = context['inline_admin_formsets']
formsets_to_remove = []
for inline_formset in inline_admin_formsets:
if hasattr(inline_formset.opts, 'after_field'):
fieldname = inline_formset.opts.after_field
if fieldname in sorted_inline_formsets:
sorted_inline_formsets[fieldname].append(inline_formset)
else:
sorted_inline_formsets.update({
fieldname: [inline_formset,]
})
formsets_to_remove.append(inline_formset)
for inline_formset in formsets_to_remove:
inline_admin_formsets.remove(inline_formset)
context.update({
'sorted_inline_formsets': sorted_inline_formsets,
'inline_admin_formsets': inline_admin_formsets
})
return super(EditModelAdmin, self).render_change_form(request, context, add=add,
change=change, obj=obj, form_url=form_url)
हम कुंजी के रूप में FIELDNAME साथ खुद शब्दकोश में अतिरिक्त क्षेत्र के साथ सभी inlines आगे बढ़ रहे हैं ... इसे सही ढंग से प्रदान करने की लिए बनाने फ़ाइल/टेम्पलेट्स/व्यवस्थापक/शामिल/fieldet.html जो मानक django फ़ील्डसेट को ओवरराइड करता है।निम्नलिखित सामग्री के साथ एचटीएमएल:
{% load custom_filter %}
<fieldset class="module aligned {{ fieldset.classes }}">
{% if fieldset.name %}<h2>{{ fieldset.name }}</h2>{% endif %}
{% if fieldset.description %}
<div class="description">{{ fieldset.description|safe }}</div>
{% endif %}
{% for line in fieldset %}
<div class="form-row{% if line.fields|length_is:'1' and line.errors %} errors{% endif %}{% if not line.has_visible_field %} hidden{% endif %}{% for field in line %}{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% endfor %}">
{% if line.fields|length_is:'1' %}{{ line.errors }}{% endif %}
{% for field in line %}
<div{% if not line.fields|length_is:'1' %} class="field-box{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% if not field.is_readonly and field.errors %} errors{% endif %}{% if field.field.is_hidden %} hidden{% endif %}"{% elif field.is_checkbox %} class="checkbox-row"{% endif %}>
{% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %}
{% if field.is_checkbox %}
{{ field.field }}{{ field.label_tag }}
{% else %}
{{ field.label_tag }}
{% if field.is_readonly %}
<div class="readonly">{{ field.contents }}</div>
{% else %}
{{ field.field }}
{% endif %}
{% endif %}
{% if field.field.help_text %}
<div class="help">{{ field.field.help_text|safe }}</div>
{% endif %}
</div>
{% if field.field.name %}
{% with field.field.name as fieldname %}
{% if sorted_inline_formsets|get_dict_value:fieldname != False %}
{% for inline_admin_formset in sorted_inline_formsets|get_dict_value:fieldname %}
{% include inline_admin_formset.opts.template %}
{% endfor %}
{% endif %}
{% endwith %}
{% endif %}
{% endfor %}
</div>
{% endfor %}
</fieldset>
यह संगत फ़ील्ड के बाद क्रमबद्ध inlines जोड़ देगा ... अब आप केवल Django टेम्पलेट में शब्दकोश के साथ काम करने के लिए custom_filter की जरूरत है, templatetags/custom_filter पैदा करते हैं। py और जोड़ें:
@register.filter
def get_dict_value(dict, key):
if key in dict:
return dict[key]
else:
return False
और देखा: आप उस क्षेत्र के बाद इसे जोड़ने के लिए किसी भी इनलाइन में किसी भी FIELDNAME दर्ज कर सकते हैं ... यह सेटअप करने के लिए एक सा काम है लेकिन सॉर्ट करने के लिए अगर आपके पास कई inlines है यह हो सकता है एक क्लीनर तरीका ...
एक और कामकाज जो कुछ संबंधों में क्लीनर है - और दूसरों में गंदगी - इनलाइनों को स्थानांतरित करने के लिए jQuery का उपयोग करना होगा। –
@andybak वर्तमान सीमा को देखते हुए, jquery का उपयोग एक साफ कामकाज होगा। – elsadek
यदि आप मूल फ़ील्ड सेट का हिस्सा नहीं हैं, तो आप इनलाइन के लिए फ़ील्ड भी बना सकते हैं। वैसे भी जो मैं वैसे भी था। – radtek