Django:使用基于类的视图如何创建使用两个模型的表单?

时间:2016-06-11 05:36:36

标签: django forms django-class-based-views

我正在使用基于类的通用视图,因为它们出现在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表单加载到一次保存的单个模板中,或者其他任何方法都是最正确的。我该怎么做?

0 个答案:

没有答案