python - 使用 form.py 编辑模型

标签 python django

有人能给我解释一下以下内容吗?如何更新代码,以便我可以在 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/

相关文章:

python - 麻烦加载手套 840B 300d 矢量

python - 如何使用 for 循环返回列表的最后一个元素

python - Django QuerySet 差异方法不起作用

python - 我应该编辑 django 迁移文件来编辑不匹配的依赖项吗

Django MPTT Postgres 更新查询运行缓慢

python - 自定义 django 用户模型不一致的迁移历史错误

python - 无法从 fastkml 包导入 kml 模块

python - 打印列表列表,不带括号

Python 请求 SSL 错误 504

django - JetBrains PyCharm 很棒,但我不想花 99 美元