2016-02-10 58 views
0

我該如何記錄循環回答問題? 我有幾個問題,我會在同一時間回答所有權力創建一個循環,讓我每 我可以創建一個循環爲每個問題和每個答案,但是當驗證表單時,它不會在我的數據庫中註冊...如何註冊表單中循環的多個字段?

所以這是我的models.py:

class Page(models.Model): 
    title = models.CharField(max_length=30) 


    def __str__(self): 
     return self.title 

class Question(models.Model): 
    label = models.CharField(max_length=30) 
    page = models.ManyToManyField(Page) 

    def __str__(self): 
      return self.label 

class Reply(models.Model): 
    question = models.ForeignKey(Question) 
    user = models.ForeignKey(Personne) 
    answer = models.CharField(max_length=30) 
    creationDate = models.DateTimeField(default=django.utils.timezone.now) 

    def __str__(self): 
     return str(self.answer) 

和我的模板:

<center><h3> Formulaire de la {{ numPages }} pour lutilisateur : <center>{{ logged_user|upper }}.</center> </h3></center> 
<form action="" method="POST" enctype="multipart/form-data" > 
    {% csrf_token %} 
    <!-- {{ form.as_p }} --> 
    <p> 
    {% for question in questions %}<hr> 
    <label for="question">{{ question }}</label> 
    <input type="hidden" id="id_question_{{ question.id }}" name="question" value="{{ question.id }}"/> 
    </p> 
    <p> 
    <label for="answer">Réponse :</label> 
    <input type="text" id="id_answer_{{ question.id }}" name="answer" /> 
    </p> 
    {% endfor %}<hr> 
    <p> 
    <label for="creationDate">Date de création :</label> 
    <input type="text" id="id_creationDate" name="creationDate" /> 
    </p> 
    <p> 
    <label for="user"> User : {{ logged_user }}</label> 
    <input type="hidden" id="id_user" name="user" /><!-- <select name="{{ logged_user }}" size="1"> 
     <option id="{{ logged_user.id }}">{{ logged_user }}</option> 
    </select> --> 
    </p> 
    <p> 
    <br><br><br> 
    <center><input type="submit" class="btn btn-success" value="Submit" /></center> 
    </p> 
</form> 

,我的views.py:

def access(request,instance): 
    replies = Reply.objects.all() 
    logged_user = get_logged_user_from_request(request) 
    numPages = Page.objects.get(pk=instance) 
    questions = Question.objects.filter(page=instance) 
    pagesfilter = Question.objects.get(pk=1) # PEUT ETRE CHANGER SE FILTRE - A VOIR 
    # pagesfilter = Page.objects.get(pk=instance).reply_set.filter(user=logged_user) # PEUT ETRE CHANGER SE FILTRE - A VOIR 
    form = ReplyForm(request.GET) 
    personnes = Personne.objects.all() 
    if logged_user: 
     if len(request.POST) > 0: 
      form = ReplyForm(request.POST) 
      if form.is_valid(): 
       user = form.cleaned_data['user'] 
       question = form.cleaned_data['question'] 
       answer = form.cleaned_data['answer'] 
       form.save(commit=True) 
       return HttpResponse(form.cleaned_data["user"]) 
      else: 
       return render_to_response('polls/access.html', {'logged_user':logged_user, 'pagesfilter': pagesfilter, 'numPages': numPages, 'personnes': personnes, 'replies': replies, 'questions': questions, 'form': form}) 
     else: 
      form = ReplyForm() 
      return render_to_response('polls/access.html', {'logged_user':logged_user, 'pagesfilter': pagesfilter, 'numPages': numPages, 'personnes':personnes, 'replies': replies, 'questions': questions, 'form': form}) 
    else: 
     return HttpResponseRedirect('/login') 

我forms.py

class ReplyForm(forms.ModelForm): 
    class Meta: 
     model = Reply 
     fields = ('question','answer','user') 

編輯URL:

url(r'^baseVisite/$', views.baseVisite), 
url(r'^access/(?P<instance>[0-9]+)/$', views.access), 

爲什麼我的提交按鈕不起作用,我忘了?

+0

究竟你「提交按鈕不起作用」是什麼意思? –

+0

@哈肯當我點擊提交,我有一個很好的重定向,但反應了信息在我的數據庫 –

+0

你試過步通過與PDB您的視圖功能沒有註冊? https://mike.tig.as/blog/2010/09/14/pdb/ 嘗試找出你的錯誤,並創建一個[MCVE。 –

回答

2

編輯:要更新許多使用ModelForm的記錄:你不能。 在您的示例中,只有{{form.as_p}}字段可以使用。 你應該使用這個職位的標準表格:How to create a list of fields in django forms

您的語法模板是錯誤的。你的p標籤是你的循環。

試試這個:

<center><h3> Formulaire de la {{ numPages }} pour lutilisateur : <center>{{ logged_user|upper }}.</center> </h3></center> 
<form action="" method="POST" enctype="multipart/form-data" > 
    {% csrf_token %} 
    <!-- {{ form.as_p }} --> 
    {% for question in questions %} 
    <hr> 
    <p> 
     <label for="question">{{ question }}</label> 
     <input type="hidden" id="id_question_{{ question.id }}" name="question" value="{{ question.id }}"/> 
    </p> 
    <p> 
     <label for="answer">Réponse :</label> 
     <input type="text" id="id_answer_{{ question.id }}" name="answer" /> 
    </p> 
    {% endfor %}<hr> 
    <p> 
    <label for="creationDate">Date de création :</label> 
    <input type="text" id="id_creationDate" name="creationDate" /> 
    </p> 
    <p> 
    <label for="user"> User : {{ logged_user }}</label> 
    <input type="hidden" id="id_user" name="user" /><!-- <select name="{{ logged_user }}" size="1"> 
     <option id="{{ logged_user.id }}">{{ logged_user }}</option> 
    </select> --> 
    </p> 
    <p> 
    <br><br><br> 
    <center><input type="submit" class="btn btn-success" value="Submit" /></center> 
    </p> 
</form> 
+0

我試過你的代碼,但效果不好 –

+0

好的,這是因爲你生成了自定義字段。 ** from.save()**方法只會在您的** <! - {{form.as_p}} - > **行生成的表單中獲取值。 如果您想在同一時間編輯多個模型,則不能'使用ModelForm。 – jedema

+0

您是否有一個用於多重錄音的ModelForm示例? –

-1

你必須定義表格action屬性與正確的網址訪問您的看法,現在你的action=""什麼是錯的。

因此,您必須定義路線並使用Django URLDispatcher註冊您的視圖,然後您就可以設置表單操作了。

嘗試與Django Tutorial合作以更好地理解django的工作原理。

您的表單動作要action="access/{id}/",其中(編號)是呈現了商品頁面的ID,但是請注意,是更好地爲摘錄到你url聲明添加下面的名字:

url(r'^access/(?P<instance>[0-9]+)/$', views.access, name='access') 

並使用{% url %}建立表單操作:

action="{% url id %}" 
+0

我該怎麼做?網址 –

+0

與我已經更新了更多的信息 –

+0

@JeremyLgdr更新的答案。 –

相關問題