Django Admin: Personnalisation de la ligne de modèle (tabular.html)

Je suis en train de suivre les lignes directrices en cette réponse, mais je suis coincé avec la façon de modifier le modèle.

La partie pertinente de mon admin.py:

SegmentFormset = forms.models.inlineformset_factory(Division,Segment)
class DivisionForm(forms.ModelForm):
    def __init__(self, **kwargs):
        super(DivisionForm, self).__init__(**kwargs)
        self.segment_formset = SegmentFormset(instance=self.instance, data=self.data,
                prefix=self.prefix)

    def is_valid(self):
        return (super(DivisionForm, self).is_valid() and 
                    self.segment_formset.is_valid())

    def save(self, commit=True):
        assert commit == True 
        res = super(DivisionForm, self).save(commit=commit)
        self.segment_formset.save()
        return res

class DivisionInline(admin.TabularInline):
    model = Division
    form = DivisionForm
    template = 'competitions/admin/tabular.html'

class CompetitionAdmin(VersionAdmin):
    inlines = [DivisionInline,]

La partie pertinente de mon modèle:

    {% 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 %}
         <td>My segment formset should be here</td>
    {% endfor %}

Ce que je ne peux pas savoir comment accéder au segment formset. J'ai expérimenté avec tous les noms de variable et aucun d'entre eux sont mes DivisionForm. La division formset est le {{fieldset.formset}} variable et qui est aussi loin que j'ai pu obtenir.

Edit 1:

En fait, la partie pertinente du modèle est un peu plus 😉 en Mettant en plus de code:

 <tbody>
 {% for inline_admin_form in inline_admin_formset %}
    {% 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.formset %}
        {% for field in line %}
          <td class="{{ field.field.name }}">
          {{ field.field.errors.as_ul }}
          {{ field.field }}
          </td>
        {% endfor %}
      {% endfor %}
      <td>My segment formset should be here</td>
    {% 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>

 {% endfor %}
 </tbody>
Votre mise en œuvre est très différente de celle de la réponse que vous liez. Vous pouvez essayer d'utiliser le django de la barre d'outils pour inspecter votre modèle de variables.

OriginalL'auteur Monika Sulik | 2010-02-01