尝试在表单操作

时间:2018-04-25 10:37:15

标签: python django

我是django的新手,现在我被困住了。 我正在尝试传递form [action]属性中的url,该属性将转到我在[views.py]文件中定义的编辑函数并执行它的工作,但每当我尝试传递url [NoReverseMatch]时都会显示。

这就是我试图做的事情:

<div  class="modal fade" id="editform" role="dialog">
  <div class="modal-dialog">
    <div class = "modal-content">
      <div class = "modal-header">
        <button type = "button" class = "close" data-dismiss="modal">&times;</button>
        <h3 class="modal-title">
          <b>Edit Information</b>
        </h3>
      </div>
      <div class = "modal-body">
        <form action="{% url 'studentapp:editrow' rowid=id %}" id="editform" method="POST">
          {% csrf_token %}
          <div class = "form-group">
            <label for = "your_name">
              Your name:
            </label>
            <input class = "form-control" id="new_name" type = "text" name="name" value="{{ student_detail.name }}" placeholder="Enter your name">
          </div>
          <div class="form-group">
            <label for = "course_name">
              Course:
            </label>
            <input id="new_course" class = 'form-control' type = "text" name="course" value="{{ student_detail.course }}" placeholder="Enter your course">
          </div>
          <div class = "form-group">
            <label for = "rollno">
              Roll No.:
            </label>
            <input id="new_rollno" type = "text" class = 'form-control' name="roll" value="{{ student_detail.roll }}" placeholder="Enter your roll number">
          </div>
          <div class = "form-group">
            <label for ="addr">
              Address:
            </label>
            <input id="new_address" type = "text" name="address" class = 'form-control' value="{{ student_detail.address }}" placeholder="Enter your address"/>
          </div>
          <input type = "submit" value="Update" id="update" class = "btn btn-success" style="font-size:18px;" />
        </form>
      </div>
    </div>
  </div>
</div>

在我的urls.py中,我使用了以下网址:

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

我的[editrow]视图看起来像这样:

def editrow(request, rowid):
item = get_object_or_404(Studentapp, rowid=id)
print item
if request.method=="POST":
    form = EntryForm(request.POST, instance=item)
    if form.is_valid():
        post=form.save(commit=False)
        post.save()
        return HttpResponseRedirect(reverse('studentapp:index'),rowid.id)
    else:
        form=EntryForm(instance=item)
    return render(request, 'index.html',{'form':form})
else:
    form=EntryForm(instance=item)
    return render(request, 'index.html',{'form':form})

查看渲染是模板:

def index(request):
    context = {}
    latest_student = Studentapp.objects.order_by('pub_date')
    context.update({
        'latest_student': latest_student
    })
    response = {"status": False, "errors": []}
    if request.is_ajax():
        id = request.POST['id']
        response = {}
        response['status'] = False
        student_detail = Studentapp.objects.filter(id=id).first()

        context = {
            "student_detail": student_detail
        }

        template = render_to_string("studentapp/_edit_student.html", context)
        response['template'] = template
        response['status'] = True
        return HttpResponse(json.dumps(response), content_type="applicaton/json")

    return render(request, "studentapp/index.html", context)

我在做的事情是: 1)通过for循环在表格中创建一个[edit]按钮。 2)当我点击[编辑]按钮时,会显示一个预先填充的表格(我正在收到)。 3)点击预先填充的表格后,我想编辑该表格并保存,更新的数据反映在我的django数据库中。

2 个答案:

答案 0 :(得分:1)

感谢@Alasdair,我查看了他的代码,他试图告诉我什么,我得到了答案。 我试图通过我的动作属性的网址是错误的。这就是我的所作所为。

<form action="{% url 'studentapp:editrow' rowid=student_detail.id %}" id="editform" method="POST">

通过&#34; student_detail&#34;我可以像上面提到的那样获得预先填充的表格。我使用相同的方法来获取id并将其传递给我的&#34; editrow&#34;图。

它现在为我工作。

答案 1 :(得分:0)

您似乎永远不会在视图id中向您的上下文添加index。因此模板没有可用的变量。

您需要将该ID添加到您的上下文中。 就像@Alasdair在评论中指出的一样。