我正尝试使用模式作为编辑形式,但我不知道好方法。
目前我的views.py
就是这样。
def edit_entry(request, entry_pk):
entry = get_object_or_404(Entry, pk=entry_pk)
if request.method != 'POST':
form = EntryForm(instance=entry, user=request.user)
else:
form = EntryForm(instance=entry, data=request.POST, user=request.user)
if form.is_valid():
form.save()
并且我有此视图的模板。
我想做的是 在列出一堆输入对象的页面上,单击“编辑”按钮时将显示该对象的编辑表单。
{% for entry in entries %}
...
<button class="btn btn-outline-primary" data-toggle="modal" data-target="#editEntryModal">Edit</button>
<!-- modal for the object -->
有人可以给我提示吗?
答案 0 :(得分:0)
您需要将表单以html格式发送回并粘贴在模式中,然后再显示。因此,点击后,您首先会提出ajax请求,这将以html格式发送回您的表单。例如,
def edit_entry(request, entry_pk):
....
entry = get_object_or_404(Entry, pk=entry_pk)
if request.method != 'POST':
form = EntryForm(instance=entry, user=request.user)
return HttpResponse(form.as_p()) # This will return the plain html of a form
....
希望这会有所帮助!
答案 1 :(得分:0)
您尝试仅使用django模板实现的功能。 您需要js或jquery或任何前端框架。
当您单击编辑按钮时,当前dom中将出现一个“编辑自”信息,您需要进行ajax调用以获取用于编辑的初始数据。编辑数据并提交数据,然后在后端更新对象。 django rest框架更适合这种任务。
答案 2 :(得分:0)
我有一个类似的任务,首先从模板创建了一个ajax请求以加载数据:
<script>
$(document).ready(function(){
$("#myBtn").click(function(){
var pk = $(this).data('pid')
$("#myModal").modal("show");
});
$("#myModal").on('show.bs.modal', function(event){
var modal = $(this)
var pk = $(this).data('pid')
$.ajax({
data: {'pk': pk},
url: "{% url 'search:load_paper' %}",
context: document.body,
error: function(response, error) {
alert(error);
}
}).done(function(response) {
modal.html(response);
});
});
});
</script>
load_paper
函数如下所示:
def load_paper(request):
pk = request.GET.get('pk')
object = get_object_or_404(Paper, pk = pk)
form = PaperForm(instance=object)
return render(request, 'edit_paper_modal.html', {
'object': object,
'pk': pk,
'form': form,
})
数据呈现在“ edit_paper_modal.html”中,如下所示:
<div class="modal-dialog modal-lg" role="document">
<form action="{% url 'search:edit_paper' pk=object.pk %}" method="post" class="form" enctype="multipart/form-data">
{% csrf_token %}
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
<span class="sr-only">Close</span>
</button>
<h4 class="modal-title">Edit Paper</h4>
</div>
<div class="modal-body">
{% csrf_token %}
{{form|crispy}}
{{ form.media }}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<input type="submit" class="btn btn-primary" value="Save changes" />
</div>
</div><!-- /.modal-content -->
</form>
</div>
这里的关键是我将纸张的pk
传递回edit_paper
中的views.py
函数,该函数实际上保存了表单。
希望这是有用的!