Редактировать данные в форме - PullRequest
0 голосов
/ 18 февраля 2012

Мне удалось использовать форму и шаблон django для вставки данных в базу данных. Я также могу отображать данные в очень простой HTML-странице. Однако я совершенно не могу понять, как мне поступить с редактированием данных. Я предполагаю, что я могу, по крайней мере, повторно использовать шаблон django, который использовал для создания новой записи базы данных, чтобы также редактировать записи, устраняя тем самым необходимость создания шаблона «edit».

Имейте в виду, я могу редактировать запись в консоли, но в браузере я просто не могу понять, как загрузить данные, какие переменные содержат мой первичный ключ, когда я нажимаю на ссылку отображаемого транспортного средства и как передать извлеченные данные из базы данных в форму, чтобы их можно было редактировать и т. д. Я проверил сайт администратора на предмет того, как он это делает, но все же ... не повезло.

Вот мой код вставки: Как я могу изменить это, чтобы позволить мне редактировать данные, отображаемые в 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))

Но при этом я получаю ошибки другого типа. Я даже не уверен, так ли это. Может ли кто-нибудь указать мне правильное направление?

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

Затем эта часть шаблона подсвечивается: {{ 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})    )

Ответы [ 2 ]

1 голос
/ 18 февраля 2012

Изменить строку URL-адреса для использования параметров в URL,

например:.

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

В vehicle_add первый параметр (второй после собственного параметра) будет vehicle_id , взятый из URL.

Вы можете назвать это как хотите, например vehicle_id.

Используйте это:

newvehicle= Vehicle.objects.get(pk=vehicle_id)
0 голосов
/ 18 февраля 2012

Передайте форму диктанта:

#WORKING ON THIS
    # form = VehicleForm  <<< THIS LINE IS UNNECESSARY
    newvehicle = Vehicle.objects.get(pk=9)
    form = VehicleForm(newvehicle.__dict__)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...