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?