1

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

模型.py:

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

表格.py:

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

视图.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我使用(文档

form = AddCar(car)

但我有一个错误:'Car' object has no attribute 'get'for all {{ form.field }}in template。

4

2 回答 2

1

car可以作为关键字参数传递给实例ModelForminstance即。

AddCar(instance=car)

要检测更改,您可以使用实例结合字典的is_valid()方法。您必须按原样获取对象,使用值实例化表单,然后比较您获取的值和.AddCarcleaned_datacarAddCarrequest.POSTcarAddCar.cleaned_data

于 2013-11-10T11:45:40.433 回答
1
form = AddCar({'car': get_object_or_404(Car, pk=car_id,).name,})

没有ModelForm

于 2013-11-10T13:03:30.983 回答