2016-11-30 5 views
0

Я создаю функцию, которая позволяет обрабатывать формы. На мой взгляд, пользователь дает идентификатор, затем сценарий принимает этот идентификатор и отображает соответствующую форму с возможностью обновления данных.Обновить форму с Django из значения GET

Моя функция выглядит следующим образом:

def Identity_Update(request) : 

    query_update = request.GET.get('q4') 
    if query_update : 
     query_update_list = Identity.objects.filter(id__iexact=query_update)  
    else : 
     query_update_list = Identity.objects.none() # == [] 

    template_name = 'edit.html' 

    ############ 

    instance = Identity.objects.get(id = ???) # ID have to be egal to query_update 
    form = IdentityForm(request.POST or None, instance = instance) 

    if form.is_valid(): 
     form.save() 
     return HttpResponseRedirect('accueil') 

    context = { 
     "query_update" : query_update, 
     "query_update_list" : query_update_list, 
     "form": form, 
     "instance" : instance 
     } 

    return render(request, template_name, context) 

Мой шаблон выглядит следующим образом:

<!-- ############################################## --> 
<!-- Modifier un formulaire dans la Base de Données --> 
<!-- ############################################## --> 

<h2 align="center"> Modification des fiches individuelles </align> </h2> 

{% block content %} 

<h4> ID du formulaire à modifier : </h4> 

<form method="GET" action="">{% csrf_token %} 
    <input type="text" name="q4" placeholder="Entrer un ID" value="{{ request.GET.q4 }}"> 
    <input type="submit" value="Valider l'ID"> 
</form> 

<ul> 
    Personne concernée : 
    <br></br> 
{% for item in query_update_list %} 
    <li> {{ item }} </li> 
{% endfor %} 
</ul> 

<br></br> 

<h4> Modification du formulaire : </h4> 

<form method='POST' action= "" > {% csrf_token %} 

{{form.as_ul}} 

<input type ="submit" value="Valider" /> 
</form> 

{% endblock %} 

Я получаю следующую задачу:

Как я мог взять значение q4 вернулся пользователем и поместите его как id = q4 , Я не нашел способ сделать это. На картинке, форма уже заполнена, потому что я написал вручную идентификатор, но форма должна оставаться пустой, пока я не дам значение q4

Большое спасибо, если вы можете мне помочь!

enter image description here

PS: Может быть, мне нужно поставить форму часть внутри query_update if loop?

+0

Какие у вас проблемы? У вас есть сообщение об ошибке? – neverwalkaloner

+0

Было бы намного проще использовать существующий 'UpdateView'. – Sayse

+0

@neverwalkaloner Я не могу отобразить связанную форму с идентификатором, указанным пользователем, и изменить ее – Deadpool

ответ

1

Попробуйте переопределить метод get_object() класса IdentityUpdate, чтобы выбрать определенный объект из параметров GET запроса.

class IdentityUpdate(UpdateView) : 

    model = Identity 
    form_class = IdentityForm 
    fields = '__all__' 
    template_name = 'resume.html' 

    def get_object(self): 
     query_update = request.GET.get('q4') 
     return get_object_or_404(Identity, pk=query_update) 

Если вы предпочитаете работать с функцией на основе зрения попытаться изменить Identity_Update вид() к этому:

def Identity_Update(request) : 

    # ID object given by user 
    query_update = request.GET.get('q4') 
    obj = get_object_or_404(Identity, pk=query_update) 

    if query_update : 
     updating_form = IdentityForm(request.POST, instance = obj) 
    .... 
+0

Да, я предпочитаю работать с функцией, основанной на просмотре. Это более или менее то, что я делал ранее.Я попытаюсь изменить объекты из базы данных – Deadpool

0

Я думаю, что проблема из вас:

когда вы размещаете эту форму :

<form action="" method="post">{% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Update" /> 
</form> 

значение в вашем q4 вход не будет представлять, потому что они находятся в сиситемах арендная форма, так что вы можете получить значение q4 (ID?) на ваш взгляд. Поэтому я предлагаю вам опубликовать его в той же форме.

+0

Я реорганизую свой вопрос с большим количеством примеров. Я просто блокирую одну точку: связать 'id' с пользовательским значением' q4' – Deadpool

Смежные вопросы