Обновление формы django с помощью 2 отдельных функций (функция шаблона и функция формы)
Я пытаюсь обновить форму из отдельной функции.
При нажатии на кнопку "Добавить" существующая форма обновляется путем добавления пользователя в форму.
Добавление пользователя в форму работает нормально. Однако я теряю текстовый ввод из исходной формы при отправке обновления.
Причина, по которой я использую 2 функции, заключается в том, что у меня есть несколько форм на одном шаблоне: каждая форма перенаправляется на определенный url, определенный в action="{% url %}"
Обычно я использую следующий способ обновления формы:
def function(request, id)
instance = get_object_or_404(Model, pk=id)
data = Model(request.POST or None, instance = instance)
В данном случае это не работает, потому что мне нужно обеспечить instance_id
в родительской функции, но id parameter
обеспечивается в функции, которая поддерживает форму. (дочерняя функция)
Полагаю, есть 2 варианта/вопроса:
- Могу ли я получить доступ к form_id из родительской функции?
- Нужно ли это делать в функции формы? и как в этом случае сохранить существующий текст при обновлении формы? существующий текст при обновлении формы?
модель
class UserProfile(models.Model):
user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
class Model(models.Model):
user = models.ManyToManyField(User, blank=True)
text = models.TextField('text', blank=True)
шаблон (main/parentfunctiontemplate.html)
{%for model in a %}
<form action="{%url 'child-function' userprofile.id model.id%}" method="POST">
{% csrf_token %}
<input type="Submit" value="Add" class="btn btn-primary custom-btn">
</form>
{%endfor%}
view
def parent_function(request, userprofile_id):
a = Model.objects.filter(venue=request.user.userprofile.venue)
updateform=ModelForm()
return render(request,"main/parentfunctiontemplate.html",{'updateform':updateform,'a':a})
def child_function(request, userprofile_id,model_id):
url = request.META.get('HTTP_REFERER')
userprofile = get_object_or_404(UserProfile, pk=userprofile_id)
instance = get_object_or_404(Model, pk=model_id)
updateform = ModelForm(request.POST or None, instance = instance)
if updateform.is_valid():
data = updateform.save(commit=False)
data.save()
updateform.save_m2m()
current_model_instance = get_object_or_404(Model, id=data.id)
current_model_instance.user.add(userprofile.id)
return redirect(url)
else:
print(updateform.errors)
return redirect('main/parentfunctiontemplate.html',{'userprofile':userprofile,'instance ':instance })
form
class ModelForm(ModelForm):
class Meta:
model = Model
fields = ('text')