我正在使用基于类的通用视图,因为它们出现在Django官方教程中。我有两个相关的模型:
class Client(models.Model):
first_name = models.CharField(max_length=40)
last_name = models.CharField(max_length=40)
email = models.EmailField
phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
phone_number = models.CharField(validators=[phone_regex], blank=True, max_length=15) # validators should be a list
def __str__(self):
return self.first_name + self.last_name
class ClientAddress(models.Model):
client = models.ForeignKey(Client, on_delete=models.CASCADE)
street = models.TextField()
city = models.TextField()
state = models.TextField()
zip_code = models.TextField()
我有一个用于创建新Client对象的视图:
class ClientCreateView(generic.CreateView):
model = Client
form_class = ClientForm
success_url = reverse_lazy('work:client_index')
我为每个模型都有一个表单:
class ClientForm(ModelForm):
class Meta:
model = Client
fields = ['first_name', 'last_name']
class ClientAddressForm(ModelForm):
class Meta:
model = ClientAddress
fields = ['street', 'city', 'state', 'zip_code',]
我有一个用于渲染ClientCreateView的模板:
<h1>Create Client Form</h1>
<form action="" method="POST">{% csrf_token %}
{{ form.as_p }}
{{ sub_form.as_p }}
<input type="submit" value="Save" />
</form>
我想使用单个表单生成关联的Client和ClientAddress对象,或者将django表单加载到一次保存的单个模板中,或者其他任何方法都是最正确的。我该怎么做?