在 Django 中,我们经常需要创建和编辑模型对象。通常,我们会为每个操作创建一个单独的表单。然而,在某些情况下,我们可能希望使用同一表单来处理模型的创建和编辑。这可以使我们的代码更加简洁和易于维护。
2、解决方案
(1) 使用 ModelForm
我们可以使用 ModelForm 来实现这一目标。ModelForm 是 Django 提供的一个类,可以根据模型类自动生成表单。在我们的例子中,我们可以创建一个名为 CarForm 的 ModelForm,如下所示:
from django import forms
from .models import Car
class CarForm(forms.ModelForm):
class Meta:
model = Car
fields = ('car',)
然后,我们可以在视图中使用 CarForm 来处理模型的创建和编辑。如下所示:
@csrf_protect
@login_required
def add_car(request):
if request.method == 'POST':
form = CarForm(request.POST)
if form.is_valid():
form.save()
return redirect('car_list')
else:
form = CarForm()
return render(request, 'add_car.html', {'form': form})
@csrf_protect
@login_required
def edit_car(request, car_id):
car = get_object_or_404(Car, pk=car_id)
if request.method == 'POST':
form = CarForm(request.POST, instance=car)
if form.is_valid():
form.save()
return redirect('car_list')
else:
form = CarForm(instance=car)
return render(request, 'edit_car.html', {'form': form})
在上面的代码中,我们使用 CarForm 来处理模型的创建和编辑。对于创建操作,我们只需创建一个新的 CarForm 实例,并在 POST 请求中调用 form.is_valid() 和 form.save() 方法即可。对于编辑操作,我们需要先获取要编辑的模型对象,然后创建一个新的 CarForm 实例,并将模型对象作为 instance 参数传递给 CarForm。这样,表单就会自动填充模型对象的数据。在 POST 请求中,我们调用 form.is_valid() 和 form.save() 方法即可更新模型对象的数据。
(2) 使用 Form
如果我们不想使用 ModelForm,也可以使用 Form 来实现这一目标。但是,我们需要手动编写表单字段。在我们的例子中,我们可以创建一个名为 AddCarForm 的 Form,如下所示:
from django import forms
class AddCarForm(forms.Form):
car = forms.CharField(label='#', max_length=5, required=True,
widget=forms.TextInput(attrs={'class':'', 'title': '#',
'placeholder': '#', 'required': 'true'}))
然后,我们可以在视图中使用 AddCarForm 来处理模型的创建和编辑。如下所示:
@csrf_protect
@login_required
def add_car(request):
if request.method == 'POST':
form = AddCarForm(request.POST)
if form.is_valid():
car = Car(car=form.cleaned_data['car'])
car.save()
return redirect('car_list')
else:
form = AddCarForm()
return render(request, 'add_car.html', {'form': form})
@csrf_protect
@login_required
def edit_car(request, car_id):
car = get_object_or_404(Car, pk=car_id)
if request.method == 'POST':
form = AddCarForm(request.POST, instance=car)
if form.is_valid():
form.save()
return redirect('car_list')
else:
form = AddCarForm(instance=car)
return render(request, 'edit_car.html', {'form': form})
在上面的代码中,我们使用 AddCarForm 来处理模型的创建和编辑。对于创建操作,我们只需创建一个新的 AddCarForm 实例,并在 POST 请求中调用 form.is_valid() 和 form.save() 方法即可。对于编辑操作,我们需要先获取要编辑的模型对象,然后创建一个新的 AddCarForm 实例,并将模型对象作为 instance 参数传递给 AddCarForm。这样,表单就会自动填充模型对象的数据。在 POST 请求中,我们调用 form.is_valid() 和 form.save() 方法即可更新模型对象的数据。
希望这篇技术文章对您有所帮助。