2012-02-18 66 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)