Как управлять формой с промежуточными полями таблицы "многие ко многим" и представлениями на основе классов?

Я хотел бы иметь возможность редактировать статью непосредственно через веб-страницу, на которой она отображается. Для этого я использую UpdateView. Моя модель "News" имеет отношения "многие ко многим" с моей моделью "User". Промежуточная модель называется "NewsUpdate" и имеет 2 дополнительных поля (update_date и update_reason). Я могу отобразить и запустить форму редактирования моей модели "News", но я не могу добавить поле "update_reason" и проверить его. Возможно ли это сделать с помощью общих представлений?

Заранее спасибо!

модели :

class News(models.Model):
    ...
    image = models.ImageField(upload_to='contents', null=True, blank=True)
    uuid = models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID')
    author = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name='Auteur', related_name='create_news')
    news_update_user = models.ManyToManyField(AUTH_USER_MODEL, through='contents.NewsUpdate', related_name='news_update_user')
    news_delete_user = models.ManyToManyField(AUTH_USER_MODEL, through='contents.NewsDelete', related_name='news_delete_user')


class NewsUpdate(models.Model):
    news = models.ForeignKey(News, on_delete=models.CASCADE, related_name='updated_news')
    updater = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name='Auteur', related_name='news_updater')
    update_date = models.DateTimeField(auto_now=True, null=True, verbose_name='Modification le')
    update_reason = models.CharField(max_length=250, verbose_name='Raison de la modification')

    class Meta:
        unique_together = ('news', 'updater')


class User(AbstractUser):
    first_name = models.CharField(
        max_length=30,
        blank=True,
        null=True,
        verbose_name='Prénom'
    )
    last_name = models.CharField(
        max_length=30,
        blank=True,
        null=True,
        verbose_name='Nom'
    )
    ...

Просмотр обновления новостей :

class NewsUpdateView(SuccessMessageMixin, UpdateView):
    model = News
    template_name = 'contents/news_update.html'
    success_message = 'La news a bien été mise à jour !'
    fields = ['category', 'title', 'content', 'image', 'status']

    def get_object(self, queryset=None):
        # To use uuid in the route
        return News.objects.get(uuid=self.kwargs.get("uuid"))

    def form_valid(self, form):
        form.instance.author = self.request.user
        self.object = form.save(commit=False)
        NewsUpdate.objects.filter(news=self.object).delete()
        for user in form.cleaned_data['news_update_user']:
            news_update = NewsUpdate()
            news_update.news = self.object
            news_update.updater = user
            news_update.save()
        return super(ModelFormMixin, self).form_valid(form)

новостные урлы :

urlpatterns = [
    path(route='news/', view=views.NewsListView.as_view(), name='news-list'),
    path(route='news/<uuid:uuid>/', view=views.NewsDetailView.as_view(), name='news-detail'),
    path(route='news/create/', view=views.NewsCreateView.as_view(), name='news-create'),
    path(route='news/<uuid:uuid>/update', view=views.NewsUpdateView.as_view(), name='news-update'),
    path(route='news/<uuid:uuid>/delete', view=views.NewsDeleteView.as_view(), name='news-delete'),
...
]

HTML форма :

<form method="POST" enctype="multipart/form-data">
{% csrf_token %}   
    {{ form|crispy }}
    <button type="submit" class="profile-btn profile-update-validate-btn">Valider</button>
    <input type="button" name="cancel" value="Annuler"
           onclick="window.location.href='{% url 'news-detail' uuid=news.uuid %}';"
           class="profile-btn profile-update-cancel-btn">
</form>
Вернуться на верх