Обновление формы 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 варианта/вопроса:

  1. Могу ли я получить доступ к form_id из родительской функции?
  2. Нужно ли это делать в функции формы? и как в этом случае сохранить существующий текст при обновлении формы? существующий текст при обновлении формы?

модель

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')
Вернуться на верх