2016-07-05 146 views
0

我已經爲我的反饋論壇類型的Web應用程序提供了一個可用的編輯表單,但我無法弄清楚如何使編輯表單中的內容出現在編輯表單中。我希望用戶點擊「編輯」並進入編輯反饋網址,並在表單中填寫反饋信息的標題和正文。我正在使用Django,但我找不到有關如何完成此操作的任何文檔。在django表單字段中顯示數據庫中的數據

這是我在forms.py

class EditFeedbackForm(forms.Form): 
    title = forms.CharField(label='Title') 
    body = forms.CharField(label='Body', widget=forms.Textarea) 

edit_feedback視圖EditFeedbackForm在views.py

def edit_feedback(request, feedback_id, board): 
    boardObj = Board.objects.get(board_name=board) 
    boardGroups = boardObj.groups.all() 
    userGroups = request.user.groups.all() 
    userBoardAccess = False 
    boardFeedbacks = Feedback.objects.filter(feedback_board=boardObj.id) 
    userFeedbacks = Feedback.objects.filter(feedback_user=request.user.profile.id) 
    print boardFeedbacks 
    for group in boardGroups: 
     if group in userGroups: 
      userBoardAccess = True 
      break 
    if not userBoardAccess: 
     messages.error(request, 'Cannot view a board you are not a member of.') 
     return boards(request) 

    post = Feedback.objects.get(id=feedback_id) 
    form = EditFeedbackForm() 
    if post.feedback_user == request.user.profile: 
     if request.method == 'POST': 
      form = EditFeedbackForm(request.POST) 
      if form.is_valid(): 
       title = form.cleaned_data['title'] 
       body = form.cleaned_data['body'] 
       post.feedback_title = title 
       post.feedback_description = body 
       post.feedback_last_modified = datetime.now() 
       post.save(update_fields=['feedback_title', 'feedback_description', 'feedback_last_modified']) 
       print "saved feedback " + str(post.id) 
     else: 
      form = EditFeedbackForm() 
    else: 
     messages.error(request, 'Cannot edit a post you did not write.') 
     return redirect('/board/' + board + '/') 

    return render(request, 'app/edit_feedback.html', {'form': form, 'board': boardObj.board_name, 'boardid': boardObj.id, 'boardObj': boardObj, 'feedback': post, 'userFeedbacks': userFeedbacks}) 

而且edit_feedback.html模板

{% extends 'app/base.html' %} 
{% load i18n widget_tweaks %} 
{% load board_extras %} 

{% block content %} 
<div id="body-wrapper"> 
    <h1><a id="undecorated" href="/board/{{board}}">{{board}}</a></h1> 
    <!-- show current feedback --> 
    <div style="margin-left: 50px;"> 
     <h4>{{feedback.feedback_title}} | {{feedback.feedback_last_modified }}</h4> 
     <h5>{{ feedback.feedback_description }}</h5> 
    </div> 

    <!-- edit form --> 
    <form role="form" action="" method="post"> 
     {% csrf_token %} 
     {% for field in form %} 
      {% if field.errors %} 
       <div class="form-group has-error"> 
        <label class="col-sm-2 control-label" for="id_{{ field.name }}"> 
        {{ field.label }}</label> 
        <div class="col-sm-10"> 
         {{ field|attr:"class:form-control" }} 
         <span class="help-block"> 
         {% for error in field.errors %} 
          {{ error }} 
         {% endfor %} 
         </span> 
        </div> 
       </div> 
      {% else %} 
       <div class="form-group"> 
        <label class="col-sm-2 control-label" for="id_{{ field.name }}">{{ field.label }}</label> 
        <div class="col-sm-10"> 
         {{ field|attr:"class:form-control" }} 
         {% if field.help_text %} 
          <p class="help-block"><small>{{ field.help_text }}</small></p> 
         {% endif %} 
        </div> 
       </div> 
      {% endif %} 
     {% endfor %} 
     <div class="form-group"> 
      <div class="col-sm-offset-2 col-sm-10"> 
       <button type="submit" class="btn btn-primary" value="Save">{% trans "Save" %}</button><br> 
      </div> 
     </div> 
    </form> 
</div> 
{% endblock %} 

我目前的解決辦法是在顯示原始帖子Ť他在頁面的頂部讓用戶可以複製並粘貼到表單中進行更改,但顯然這並不理想。

回答

1

您可以使用Django的Generic Update View來代替自己構建表單。

片段從文檔:

顯示用於編輯現有對象時,重新顯示與驗證錯誤形式(如果有的話),並更改保存到所述對象的形式的圖。這使用從對象的模型類自動生成的表單(除非手動指定表單類)。

在上面鏈接的文檔中甚至有一個足夠的例子。

+0

我已經包含了我的編輯反饋視圖,是否有一種方法可以將UpdateView合併到我有的或需要重新開始的項目中?我發現他們提供的示例過於簡單 – Catherine

+0

嘗試通過繼承UpdateView來重寫視圖。忽視你已經寫過的內容,並按照文檔中的示例進行操作。一旦你得到這個工作,你可以嘗試編寫自己的自定義視圖。但是對於你想要做的事情來說,「過於簡單」的例子就是你所需要的。 – marcusshep

+0

@凱瑟琳我在過去一直推出自己的觀點後,纔開始自己使用通用視圖。他們真的很有用。但是,當我閱讀他們的Django源代碼時,我發現我有了更好的理解 - 它很混亂,但代碼非常清晰。它們很好用,因爲你可以改變你的代碼大部分是聲明性的而不是程序性的... – rrauenza

相關問題