使用form.py编辑模型

时间:2013-11-10 11:35:06

标签: python django

有人可以解释以下内容吗?如何更新代码,我可以在obj创建和编辑时使用表单(只需一个代码)?实施例

model.py:

class Car(models.Model):
    car = models.CharField('#', max_length=5)
    def __unicode__(self):
        return str(self.id)

forms.py:

class AddCar(forms.Form):
    car = forms.CharField(label='#', max_length=5, required=True, 
        widget=forms.TextInput(attrs={'class':'', 'title': '#', 
        'placeholder': '#', 'required': 'true'}))

views.py:

@csrf_protect
@login_required
def add_car(request):
    if request.method == 'POST': 
        form = AddCar(request.POST)
        if form.is_valid():
            pass
    else:
        form = AddCar()
    return render(request, 'add_car.html', {'form': form, })

所以,我需要创建一个新网址

url(r'^edit/(?P<car_id>\d+)/$', 'cars.views.edit_car', name='edit_car'),

然后在观看次数

@csrf_protect
@login_required
def edit_car(request, car_id):
    car = get_object_or_404(Car, pk=car_id)

接下来是什么?如何将AddCar表单与car的值一起使用?如果用户更新表格中的信息,如何检查?

感谢。

更新

edit_car我使用(docs

form = AddCar(car)

但是我在模板中的所有'Car' object has no attribute 'get'都有错误:{{ form.field }}

2 个答案:

答案 0 :(得分:1)

car可以作为ModelForm关键字参数传递给instance实例,即

AddCar(instance=car)

要检测更改,您可以使用is_valid()实例与AddCar字典相结合的cleaned_data方法。您必须按原样获取car对象,使用AddCar值实例化request.POST表单,然后比较您已获取的car和{之间的值{1}}。

答案 1 :(得分:1)

form = AddCar({'car': get_object_or_404(Car, pk=car_id,).name,})

没有ModelForm