2012-02-18 26 views
0

我已经能够使用django表单和模板将数据插入数据库。我也可以在非常基本的HTML页面中显示数据。但是,我完全无法弄清楚我如何编辑数据。假设我至少可以重用我用来创建新数据库条目的django模板来编辑条目,从而不需要创建“编辑”模板。编辑表格中的数据

请注意,我可以在控制台中编辑条目,但在浏览器中,我似乎无法理解如何加载数据,当我单击显示的链接时,哪些变量携带我的主键车辆以及如何将获取的数据从数据库传递到表单以允许进行编辑等。我已经检查了管理网站以获得关于它如何在这方面做的指导,但仍然......没有运气。

这里是我的插入代码:如何修改这个以允许我编辑下面vehicle.html显示的数据?

views.py

vehicle_add - 插入到数据库

def vehicle_add(request): 
if request.method == 'POST': 
    form = VehicleForm(request.POST) 
    if form.is_valid(): 
     newvehicle = Vehicle() 
     vdetails = form.cleaned_data 
     newvehicle.reg_number= vdetails['regnumber'] 
     newvehicle.model= vdetails['model'] 
     newvehicle.manufacturer= vdetails['manufacturer'] 
     newvehicle.year= vdetails['year'] 
     newvehicle.chassis_number= vdetails['chasisnumber'] 
     Vehicle.save(newvehicle) 
     return HttpResponseRedirect('/vehicle') 
else: 
    form = VehicleForm() 
return render_to_response('vehicle_add.html', {'form': form}, context_instance=RequestContext(request)) 

vehicle.html负载在一个简单的HTML格式,如下数据:

{% for v in obj %} 
      <tr><td><a href="/vehicle/{{v.id}}/">{{ v }}</a></td></tr> 
{% endfor %}  

链接显示如下:http://localhost:8000/vehicle_add/2/

更多信息: vehicle_add.html

{% extends "base.html" %} 
{% block title %}Add Vehicle{% endblock %} 
{% block page %}Add Vehicle{% endblock %} 
{% block content %} 
<html> 
<head> 
<style type="text/css"> 
    ul.errorlist { 
    margin: 0; 
    padding: 0;} 
    .errorlist li { 
    background-color: red; 
    color: white; 
    display: block; 
    font-size: 10px; 
    margin: 0 0 3px; 
    padding: 4px 5px;} 
</style> 
</head> 
<body> 
<section id = "mainform"> 
{% if form.errors %} 
    <p style="color: red;"> 
     Please correct the error{{ form.errors|pluralize }} below. 
    </p> 
{% endif %} 
<form action="" method="post">{% csrf_token %} 
    <div class="field"> 
     {{ form.regnumber.errors }} 
     <label for="id_regnumber">Reg #:</label> 
     {{ form.regnumber }}</div> 
    <div class="field"> 
     {{ form.model.errors }} 
     <label for="id_model">Model:</label> 
     {{ form.model }}</div> 
    <div class="field"> 
     {{ form.manufacturer.errors }} 
     <label for="id_manufacturer">Manufacturer:</label> 
     {{ form.manufacturer }}</div> 
    <div class="field"> 
     {{ form.year.errors }} 
     <label for="id_year">Year:</label> 
     {{ form.year }}</div> 
    <div class="field"> 
     {{ form.chasisnumber.errors }} 
     <label for="id_chasisnumber">Chasis #:</label> 
     {{ form.chasisnumber }}</div> 
    <div class="field"> 
     <input type="submit" value="Submit"> 
     <input type="submit" value="Clear"> 
    </div></form></section> 
</body> 
</html> 
{% endblock %} 

试错:

这是我已经试过我的观点,但没有运气的事:

def vehicle_add(request): 
if request.method == 'POST': 
    form = VehicleForm(request.POST) 
    if form.is_valid(): 
     newvehicle = Vehicle() 
     vdetails = form.cleaned_data 
     newvehicle.reg_number= vdetails['regnumber'] 
     newvehicle.model= vdetails['model'] 
     newvehicle.manufacturer= vdetails['manufacturer'] 
     newvehicle.year= vdetails['year'] 
     newvehicle.chassis_number= vdetails['chasisnumber'] 
     Vehicle.save(newvehicle) 
     return HttpResponseRedirect('/vehicle') 
else: 
    #WORKING ON THIS 
     form = VehicleForm 
     newvehicle = Vehicle.objects.get(pk=9) 
     form = VehicleForm(newvehicle) 
return render_to_response('vehicle_add.html', {'form': form}, context_instance=RequestContext(request)) 

但这样做,我得到不同类型的错误。我甚至不确定那是怎么做到的。有人能指出我正确的方向吗?

编辑

这是当前的错误:

Caught AttributeError while rendering: 'Vehicle' object has no attribute 'get'

In template d:\dev\workspace\vehicle_request\vehicle_request\mvmanager\templates\vehicle_add.html, error at line 31

然后它突出功能模板的这一部分:{{ form.regnumber }}

forms.py

class VehicleForm(forms.Form): 
regnumber = forms.CharField(
          max_length=7, 
          label='Reg #:', 
          widget = forms.TextInput(attrs={'size':7}) ) 
model = forms.CharField(
         label='Model', 
         widget = forms.TextInput(attrs={'size':25}) ) 
manufacturer = forms.CharField(
           max_length=25, 
           label='Manufacturer', 
           widget = forms.TextInput(attrs={'size':25}) ) 
year = forms.IntegerField(
          label='Year', 
          widget = forms.TextInput(attrs={'size':4}) ) 
chasisnumber = forms.CharField(
           required=False, label='Chasis #', 
           widget = forms.TextInput(attrs={'size':25}) ) 
+0

你能提供的错误呢? – 2012-02-18 13:58:27

+0

我已添加错误消息。谢谢 – lukik 2012-02-18 14:20:30

+0

那么,表格在哪里?特别是,它是否有'regnumber'字段或'reg_number'字段? – Marcin 2012-02-18 14:27:25

回答

0

传递形式的字典:

#WORKING ON THIS 
    # form = VehicleForm <<< THIS LINE IS UNNECESSARY 
    newvehicle = Vehicle.objects.get(pk=9) 
    form = VehicleForm(newvehicle.__dict__) 
+0

我最大的问题之一是如何在没有硬编码的情况下通过“pk = 9”中的“9”? – lukik 2012-02-18 15:16:19

+0

正如Vadim Ya所说,从网址(即/../edit/14)中获取它。 – Jingo 2012-02-18 16:38:18

1

修改URL CONF线在URL中使用的参数,

例如:

(r'^vehicle_add/(\d+)/$','app.views.vehicle_add') 

vehicle_add第一参数(后第二自参数)将vehicle_id从URL服用。

您可以根据自己的意愿命名,例如 vehicle_id。

使用它:

newvehicle= Vehicle.objects.get(pk=vehicle_id)