Django AdminInline на отношениях "многие-ко-многим

У меня есть две такие модели:

class ArtCollection(models.Model):
    # nothing important in this case

class Artwork(models.Model):
    ...
    name = models.CharField(max_length=200, null=True, blank=True)
    art_collections = models.ManyToManyField("ArtCollection", related_name="artworks")
    image = models.ImageField(...)

Недавно я изменил отношения между ними с FK для ArtCollection в модели Artwork на m2m (как показано выше). Теперь я хотел бы получить то, что у меня было раньше, в частности ArtworkInline в панели администратора в представлении изменения ArtCollection (редактируемые поля произведения, такие как название, изменение изображения и так далее). Но это не работает. Единственное решение, которое я нашел - это вот это (я знаю, что нужно сделать предварительный просмотр изображения, а не отображать его название - но это просто пример):

from inline_actions.admin import InlineActionsMixin, InlineActionsModelAdminMixin

class ArtworkInline(admin.StackedInline):
    model = ArtCollection.artworks.through
    extra = 0
    fields = ['artwork_image']
    readonly_fields = ['artwork_image']

    def artwork_image(self, instance):
        return instance.artwork.image
    artwork_image.short_description = 'artwork image'

class ArtCollectionAdmin(InlineActionsModelAdminMixin, admin.ModelAdmin):
    ...
    inlines = [ArtworkInline]

Возможно ли иметь редактируемые поля в m2m отношениях в инлайн панели django? Я также использую grappeli и custom template для inline (которые бесполезны после изменения отношений - они довольно хорошо работали с FK, теперь я могу иметь только readable_fields на default template).

{% extends 'admin/stacked_inline.html' %}
{% block fieldset %}
    <fieldset class="module aligned {{ fieldset.classes }}">
        {% for line in fieldset %}
            {% with forloop.counter as counter %}
                {% for field in line %}
                    {{ field.errors }}
                    {% if counter == 2 or counter == 6 %}
                    {% elif counter <= 7 %}
                    <p>{{ field.field }}</p>
                    {% endif %}
                {% endfor %}
            {% endwith %}
        {% endfor %}
    </fieldset>
    {% if inline_admin_formset.formset.can_delete and inline_admin_formset.has_delete_permission and inline_admin_form.original %}
        <span class="delete">{{ inline_admin_form.deletion_field.field }} {{ inline_admin_form.deletion_field.label_tag }}</span>
    {% endif %}
{% endblock %}

Спасибо за любые советы.

Вернуться на верх