2016-11-30 31 views
0

我正在創建一個讓我們處理表單更新的函數。 在我看來,用戶給出了一個ID,然後腳本將獲得這個ID並顯示相應的表單,並有可能更新數據。使用GET值的Django更新表格

我的功能看起來像:

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 。 我沒有找到辦法做到這一點。 在圖片中,表格已經填滿了,因爲我手動寫了一個id,但是表格應該保留爲空,直到我給出一個值爲q4

非常感謝你,如果你能幫助我!

enter image description here

PS:也許我需要把組成部分裏面query_update if loop

+0

你有什麼問題?你有任何錯誤信息? – neverwalkaloner

+0

使用現有的'UpdateView'會更容易.. – Sayse

+0

@neverwalkaloner我無法顯示用戶給出的ID相關表單並修改它 – Deadpool

回答

1

嘗試覆蓋IdentityUpdate類的get_object()方法以從請求的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