首页 > 解决方案 > DJANGO:在一个基于类的视图中保存两个表单

问题描述

我很难在一个视图中保存 2 个表单,唯一的第一个正在保存,但我不知道如何保存第二个。这是我的代码和问题:

模型.py

class Office(models.Model):
    name = models.CharField(max_length=100,null=True)
    Address = models.ForeignKey(Address, on_delete=models.CASCADE, related_name='officeAddress',blank=True,null=True)
    def __str__(self):
        return self.name

class Address(models.Model):
    address_line = models.CharField(max_length=60, blank=True)
    address_line2 = models.CharField(max_length=60, blank=True)
    country = models.ForeignKey(Country, on_delete=models.CASCADE, related_name='District')
    province=ChainedForeignKey(Province,chained_field="country",chained_model_field=
     "country",show_all=False,auto_choose=True,sort=True)
    district=ChainedForeignKey(District,chained_field="province",
        chained_model_field="province",show_all=False,auto_choose=True,sort=True)
   
    class Meta:
        verbose_name = "Address"
        verbose_name_plural = "Addresses"

表格.py

class OfficeModelForm(BSModalModelForm):
    class Meta:
        model = Office
        fields = ['name']

class AddressForm(forms.ModelForm):
    class Meta:
        model = Address
        fields = ['address_line','address_line2','country','province','district']

视图.py

class OfficeCreateView(BSModalCreateView):
    form_class = OfficeModelForm
    second_form_class =  AddressForm
    template_name = 'settings/create_office.html'
    success_message = 'Success: Office was created.'
    success_url = reverse_lazy('company:office-list')    

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['address'] = self.second_form_class
        return context

create_office.html

{% load static i18n %}
{% load widget_tweaks %}
<form method="post" action="" enctype="multipart/form-data">
    {% csrf_token %}
    {{ address.media.js }}
    <div class="modal-body">
        <div class="form-group">{% render_field form.name  %}</div>
        <div class="form-group">{% render_field address.address_line %}</div>
        <div class="form-group">{% render_field address.address_line2 %}</div>
        <div class="form-group">{% render_field address.country %}</div>
        <div class="form-group">{% render_field address.province %}</div>
        <div class="form-group">{% render_field address.district %}</div>
        <button class="btn btn-primary ms-auto" type="submit">{% trans "Create new office" %}</button>
    </div>
</form>

我想我需要先保存地址,然后使用 address.id 作为办公室的外键,但我不知道如何在 CBV 中执行此操作。谢谢你的帮助...

标签: djangoformsdjango-class-based-views

解决方案


推荐阅读