有人能给我解释一下以下内容吗?如何更新代码,以便我可以在 obj 创建和编辑时使用表单(只需一个代码)?示例
模型.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'),
然后在 View 中:
@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)
但我有一个错误:模板中的所有 {{ form.field }}
的 'Car' 对象没有属性 'get'
。
最佳答案
car
可以作为 instance
关键字参数传递给 ModelForm
实例,即。
AddCar(instance=car)
要检测更改,您可以将 AddCar
实例的 is_valid()
方法与 cleaned_data
字典结合使用。您必须按原样获取 car
对象,使用 request.POST
值实例化 AddCar
表单,然后比较您已获取的汽车
和AddCar.cleaned_data
。
关于python - 使用 form.py 编辑模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19889220/