我在工作Django 1.11
我有三个模型,business
,business_address
,business_phone
wherebusiness_address
和 与business_phon
相关联business
。
每当添加新业务时,business_address
我都想创建字段。business_phone
business
为此,我实施了`
模型.py
class Business(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=200)
business_type = models.ForeignKey(BusinessType, on_delete=models.CASCADE)
class Meta:
db_table = 'businesses'
def __str__(self):
return self.name
class BusinessAddress(models.Model):
business = models.OneToOneField(Business, on_delete=models.CASCADE)
line_1 = models.CharField(max_length=200)
line_2 = models.CharField(max_length=200)
class Meta:
db_table = 'business_addresses'
def __str__(self):
return '%s, %s, %s, %s' % (self.line_1, self.line_2, self.city, self.state)
class BusinessPhone(models.Model):
business = models.ForeignKey(Business, on_delete=models.CASCADE)
phone_number = models.CharField(max_length=15, default=None)
class Meta:
db_table = 'business_phones'
def __str__(self):
return self.phone_number
表格.py
class BusinessForm(ModelForm):
class Meta:
model = Business
exclude = ()
class BusinessAddressForm(ModelForm):
class Meta:
model = BusinessAddress
fields = '__all__'
class BusinessPhoneForm(ModelForm):
class Meta:
model = BusinessPhone
exclude = ()
BusinessAddressFormSet = inlineformset_factory(
Business,
BusinessAddress,
form=BusinessAddressForm,
extra=1,
can_delete=False
)
BusinessPhoneFormSet = inlineformset_factory(
Business,
BusinessPhone,
form=BusinessPhoneForm,
extra=1,
can_delete=False
)
视图.py
class BusinessCreate(CreateView):
model = Business
fields = ['name', 'business_type']
def get_context_data(self, **kwargs):
data = super(BusinessCreate,self).get_context_data(**kwargs)
if self.request.POST:
data['business_address'] = BusinessAddressFormSet(self.request.POST)
data['business_phone'] = BusinessPhoneFormSet(self.request.POST)
else:
data['business_address'] = BusinessAddressFormSet()
data['business_phone'] = BusinessPhoneFormSet()
return data
def form_valid(self, form):
context = self.get_context_data()
form.instance.user = self.request.user
business_address = context['business_address']
business_phone = context['business_phone']
with transaction.atomic():
self.object = form.save()
if business_address.is_valid():
business_address.instance = self.object
business_address.save()
if business_phone.is_valid():
business_phone.instance = self.object
business_phone.save()
return super(BusinessCreate, self).form_valid(form)
def get_success_url(self):
messages.success(self.request, 'Business Added Successfully')
return reverse('business:list')
并在template.html
<form action="POST">
{% csrf_token %}
{% form.as_p %}
// address
{{ business_address.management_form }}
// business fields
{% render_field business_address.form.line_1 %}
{% render_field business_address.form.line_2 %}
// phone field
{{ business_phone.management_form }}
{% render_field business_phone.form.phone_number %}
</form>
但是当我填写所有详细信息时,只有business is saving in database and there is no record created for
电话and
地址`型号的详细信息,甚至没有错误。