在 Django 中,可以通过将模型实例传递给表单的 initial
参数来将旧数据传递给表单。以下是一个示例代码:
模型:
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
age = models.IntegerField()
表单:
from django import forms
class MyForm(forms.Form):
name = forms.CharField(max_length=100)
email = forms.EmailField()
age = forms.IntegerField()
def __init__(self, *args, **kwargs):
initial_data = kwargs.pop('initial_data', None) # 获取传递给表单的初始数据
super(MyForm, self).__init__(*args, **kwargs)
if initial_data:
self.fields['name'].initial = initial_data.get('name')
self.fields['email'].initial = initial_data.get('email')
self.fields['age'].initial = initial_data.get('age')
视图:
from django.shortcuts import render
from .models import MyModel
from .forms import MyForm
def my_view(request):
obj = MyModel.objects.get(id=1) # 假设需要编辑 id 为 1 的 MyModel 对象
initial_data = {
'name': obj.name,
'email': obj.email,
'age': obj.age,
}
form = MyForm(initial_data=initial_data)
return render(request, 'my_template.html', {'form': form})
模板 my_template.html
:
在这个示例中,我们首先从数据库中获取了 id
为 1 的 MyModel
对象,并将其属性值传递给表单的 initial_data
参数。然后在表单的 __init__
方法中,将初始数据分配给表单的相应字段。最后,在模板中渲染表单时,将表单实例传递给模板以进行显示。
下一篇:表单错误 - 必填字段