【问题标题】:Edit data in a form编辑表格中的数据
【发布时间】:2012-02-18 13:40:18
【问题描述】:

我已经能够使用 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})    )

【问题讨论】:

  • 能否也提供错误信息?
  • 我已添加错误消息。谢谢
  • 那么,表格在哪里?具体来说,它有regnumber 字段还是reg_number 字段?
  • 是的,它确实有一个regnumber 字段。我已将其添加到主要问题中
  • 模型表格让这种事情变得非常容易。我建议您通读the docs,然后尝试更新您的视图以使用它们。

标签: html django django-templates


【解决方案1】:

修改 url conf 行以使用 url 中的参数,

例如:

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

vehicle_add 中的第一个参数(self 参数之后的第二个)将从 url 获取 vehicle_id

你可以随意命名, 例如车辆 ID。

使用它:

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

【讨论】:

    【解决方案2】:

    将表单传递给字典:

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

    【讨论】:

    • 我最大的问题之一是如何在不硬编码的情况下传递pk=9 中的“9”?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 2013-08-22
    • 2012-09-25
    • 1970-01-01
    相关资源
    最近更新 更多