2012-02-18 19 views
0

私はdjangoフォームとテンプレートを使用してデータをデータベースに挿入できました。非常に基本的なHTMLページにデータを表示することもできます。しかし、データの編集方法を完全に理解することはできません。私は少なくとも新しいデータベースエントリを作成するために使用したdjangoテンプレートを再利用できると仮定しているので、エントリを編集して "編集"テンプレートを作成する必要はありません。フォームでデータを編集

あなたはコンソールのエントリをブラウザで編集することができますが、私は表示されたリンクをクリックすると、どの変数が私の主キーを運ぶかを頭に浮かべているように見えませんどのようにしてデータベースから取り出したデータをフォームに渡して編集などできるようにするのですか?

ここに私の挿入コードがあります:これを修正して、vehicle.htmlに表示されているデータをさらに編集する方法を教えてください。

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

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形式のデータをロードします

リンクは次のように表示されます: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)) 

しかし、私はエラーの種類が異なります。それがどうやっているのかわからない。誰かが私を正しい方向に向けることができますか?ここで

EDIT

は、現在のエラーです:

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

これは、テンプレートのこの部分をhighligths:forms.py {{ form.regnumber }}

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

は、あなたが同様のエラーを提供してもらえますか? –

+0

エラーメッセージが追加されました。ありがとう – lukik

+0

フォームはどこですか?特に、 'regnumber'フィールドまたは' reg_number'フィールドを持っていますか? – Marcin

答えて

0

形態に辞書渡し:URLのパラメータを使用する

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

私の最大の問題の1つは、ハードコーディングなしで 'pk = 9'のように" 9 "をどうやって渡すのですか? – lukik

+0

Vadim Yaが言ったように、それをURLから取り出します(つまり、/../edit/14)。 – Jingo

1

変更URL confのラインを、

例えば:

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

最初のパラメータをvehicle_add(第2の自己パラメータの後)vehicle_idは、URLから取得されます。

ご希望の名前にすることができます。 vehicle_id。

は、それを使用します。

newvehicle= Vehicle.objects.get(pk=vehicle_id) 
関連する問題