Django generic UpdateView с некоторыми пользовательскими полями

Мой вопрос довольно близок к этому UpdateView с дополнительными полями, поэтому я воспользовался этой информацией, но мне все еще не хватает некоторых деталей для завершения процесса

Итак, у меня есть простая игрушечная модель :

class TxtPlus(models.Model):
    txt = models.CharField(max_length=140)
    def __str__(self):
        return f'TxtPlus<{self.id},{self.txt}>'
    def get_absolute_url(self):
        return reverse("tplus_detail", kwargs={"pk": self.pk})

При редактировании экземпляра я хочу добавить поле, и поэтому, согласно ответу выше, я определяю пользовательскую Модель

class TxtPlusForm(ModelForm):
    info = CharField(widget=Textarea(attrs={"rows":"2"}))
    class Meta:
        model  = TxtPlus
        fields = ["txt", ]

использование UpdateView является простым

class TxtPlusUpdateView(UpdateView):
    model         = TxtPlus
    template_name = "adding_to_model_forms/tplus_update.html"
    form_class    = TxtPlusForm

Но я хочу сделать примерно следующее:

def infos_associated_to_object(object):
    return f'there is more about object:{object.pk}'

def test_edit(request,pk):
    object = TxtPlus.objects.get(id=pk)
    info   = infos_associated_to_object(object)
    if request.method == 'GET':
        form   = TxtPlusForm(instance=object,initial={'info': info})
        up_log = None
    if request.method == 'POST':
        form   = TxtPlusForm(request.POST,instance=object)
        up_log = f"change '{info}' to '{form.data['info']}'"
        form.save()
        #... add here form.data['info'] saving
    return render(
        request,
        "adding_to_model_forms/tplus_edit.html",
        {
            "object"  : object,
            "form"    : form,
            "info"    : info,
            "up_log"  : up_log
        }
    )

(конечно, infos_associated_to_object, здесь игрушечная версия...)

В частности, моя проблема с UpdateView заключается в следующем:

сначала часть

initial={'info': info} (где info = infos_associated_to_object(object) )

и затем часть

up_log = f "изменить '{info}' на '{form.data['info']}'"

#... добавьте сюда form.data['info'] saving

Можете ли вы подсказать мне, как сделать это, используя общий UpdateView?

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