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 %}
Спасибо за любые советы.