Python 使用相同的django表单编辑/添加对象

Python 使用相同的django表单编辑/添加对象,python,django,Python,Django,我已经用了答案,但由于某种原因,我没有得到一个好结果 我正在尝试对编辑表单和添加表单使用相同的模板。这是我的url.py: url(r'^app/student/new/$', 'edit_student', {}, 'student_new'), url(r'^app/student/edit/(?P<id>\d+)/$', 'edit_student', {}, 'student_edit'), def edit_student(request, id=None, templa

我已经用了答案,但由于某种原因,我没有得到一个好结果

我正在尝试对编辑表单和添加表单使用相同的模板。这是我的
url.py

url(r'^app/student/new/$', 'edit_student', {}, 'student_new'),
url(r'^app/student/edit/(?P<id>\d+)/$', 'edit_student', {}, 'student_edit'),
def edit_student(request, id=None, template_name='student_edit_template.html'):
if id:
    t = "Edit"
    student = get_object_or_404(Student, pk=id)
    if student.teacher != request.user:
        raise HttpResponseForbidden()
else:
    t = "Add"
    student = Student(teacher=request.user)

if request.POST:
    form = StudentForm(request.POST, instance=student)
    if form.is_valid():
        form.save()

        # If the save was successful, redirect to another page
        redirect_url = reverse(student_save_success)
        return HttpResponseRedirect(redirect_url)

else:
    form = StudentForm(instance=student)

return render_to_response(template_name, {
    'form': form,
    't': t,
}, context_instance=RequestContext(request))
class StudentForm(ModelForm):
class Meta:
    model = Student
    exclude = ('teacher',)
和我的
forms.py

url(r'^app/student/new/$', 'edit_student', {}, 'student_new'),
url(r'^app/student/edit/(?P<id>\d+)/$', 'edit_student', {}, 'student_edit'),
def edit_student(request, id=None, template_name='student_edit_template.html'):
if id:
    t = "Edit"
    student = get_object_or_404(Student, pk=id)
    if student.teacher != request.user:
        raise HttpResponseForbidden()
else:
    t = "Add"
    student = Student(teacher=request.user)

if request.POST:
    form = StudentForm(request.POST, instance=student)
    if form.is_valid():
        form.save()

        # If the save was successful, redirect to another page
        redirect_url = reverse(student_save_success)
        return HttpResponseRedirect(redirect_url)

else:
    form = StudentForm(instance=student)

return render_to_response(template_name, {
    'form': form,
    't': t,
}, context_instance=RequestContext(request))
class StudentForm(ModelForm):
class Meta:
    model = Student
    exclude = ('teacher',)
最后是我的模板
student\u edit\u template.html

<h1>{{ t }} Student</h1>
<form action="/app/student/edit/{{ student.id }}" method="post"> {% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
我可能错过了一些简单的东西,但在这一点上,我至少需要另一双眼睛


提前谢谢

您之所以获得404,是因为
/student/edit/
在末尾需要一个id,否则就没有路线,而且当您来自
/student/new/
时,您还没有id。为
/student/edit/
创建一个路由和视图,并将逻辑放在其中,以处理在POST上创建记录时的情况。

一件事是:该URL需要看起来像
http://192.168.1.3:5678/app/student/edit/789/
或诸如此类--您的URL中没有ID,因此是404。对——但是你可以从我发布到那个学生ID的模板中看到,它应该发布到那个URL。我应该说得更具体些——当我添加一条记录时,它是404'ing。这与尚未生成的id有关吗?是的,就是这样。我没有将
student
传递给模板,因此
id
在任何情况下都不会被填充。我必须通过
student
,然后将我的POST调用更改为尾部斜杠。这就成功了。