私のフィードバックフォーラムタイプのWebアプリケーション用の作業用の編集フォームがありますが、投稿の内容を編集フォームに表示する方法がわかりません。ユーザーが「編集」をクリックしてフィードバックの編集用のURLにアクセスし、フィードバック・ポストのタイトルと本文を既にフォームに入れておきたい。私はDjangoを使用していますが、これを達成する方法についてのドキュメントは見つかりません。データベースからのデータをdjangoフォームフィールドに表示
これは周りに私の現在の仕事はでオリジナルのポストを表示することです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 %}
でforms.py
class EditFeedbackForm(forms.Form):
title = forms.CharField(label='Title')
body = forms.CharField(label='Body', widget=forms.Textarea)
edit_feedback
ビューで私のEditFeedbackFormですt彼はページの上部にあるので、ユーザーは変更を加えるためにフォームにコピーアンドペーストすることができますが、明らかにそれは理想的ではありません。
私は自分の編集フィードバックビューを含んでいますが、私が持っているものにUpdateViewを組み込む方法はありますか、やり直す必要はありますか?あまりにも単純すぎるために提供するサンプルが見つかりました – Catherine
UpdateViewをサブクラス化してビューを書き直してみてください。すでに書いたことを無視して、ドキュメントの例に従ってください。作業が完了したら、独自のカスタムビューを作成できます。しかし、あなたがしようとしていることについては、「過度に単純な」例だけが必要です。 – marcusshep
@Catherine私は、過去に私自身のビューをロールバックした後、自分自身でジェネリックビューを使い始めました。彼らは本当に便利です。私はDjangoのソースを読んだときにわかりましたが、それは重いミックスですが、コードはかなり明確です。彼らはあなたのコードを手続き型ではなく宣言型に変更することができるので、使いやすいです... – rrauenza