Django - Сохранение нескольких необязательных объектов с помощью CreateView

Я работаю над приложением для работы с недвижимостью, в котором пользователи могут подать заявку на аренду дома или квартиры. Мне трудно понять концепцию сохранения нескольких объектов и связывания их вместе. Я хочу, чтобы форма позволяла от 1 до 4 человек подавать заявки на аренду одного объекта недвижимости. Я либо хочу 1 страницу, где пользователь может выбрать количество претендентов, а форма сохраняет X количество объектов, либо я думаю добавить 2 кнопки, на одной сохранить и завершить (текущий человек), а на другой сохранить и добавить нового человека.

Дополнительно я хочу добавить всех претендентов в единую таблицу заявок, чтобы я мог запросить свою базу данных для просмотра всех претендентов по одной заявке. Я не уверен в том, как лучше всего это сделать.

модели

class Properties(models.Model):
    property_num = models.IntegerField()
    property_road = models.CharField(max_length=200)
    rent = models.IntegerField(default=1000)
    city = models.CharField(max_length=200)
    state = models.CharField(choices=STATE_CHOICE, max_length=25)
    zip = models.IntegerField()
    bedrooms = models.IntegerField()
    bathrooms = models.FloatField(max_length=3)
    sq_foot = models.IntegerField()
    description = models.TextField(default=bedrooms)
    is_active = models.BooleanField(default=True)
    thumbnail = models.ImageField(upload_to='static/images', blank=True)
    slug = models.SlugField(blank=True, null=True, unique=True, allow_unicode=True)

class Person(models.Model):
    address = models.ForeignKey(Properties, on_delete=models.CASCADE)
    requested_move_in_date = models.DateField(default=datetime.now)
    first_name = models.CharField(max_length=200)
    middle_name = models.CharField(max_length=200)
    last_name = models.CharField(max_length=200)
    dob = models.CharField(max_length=200)
    driver_license = models.IntegerField()
    driver_license_state = models.CharField(choices=STATE_CHOICE, max_length=25)

class Application(models.Model):
    applicant1 = models.ForeignKey(Person, related_name='applicant',  on_delete=models.CASCADE)
    applicant2 = models.ForeignKey(Person, related_name='co_applicant1', blank=True, null=True, on_delete=models.CASCADE)
    applicant3 = models.ForeignKey(Person, related_name='co_applicant2', blank=True, null=True, on_delete=models.CASCADE)
    applicant4 = models.ForeignKey(Person, related_name='co_applicant3', blank=True, null=True, on_delete=models.CASCADE)
    property = models.ForeignKey(Properties, on_delete=models.CASCADE)
    application_date = models.DateTimeField(default=datetime.now)

Форма

class ApplicationForm(forms.ModelForm):
    class Meta:
        model = Person
        fields = '__all__'
        # exclude = ['application_date']
        widgets = {
            'job_start_date': DateInput(),
            'current_address_end_date': DateInput(),
            'current_address_start_date': DateInput(),
            'previous_address_end_date': DateInput(),
            'previous_address_start_date': DateInput(),
            'application_date': forms.HiddenInput(),

View

class ApplicationView(CreateView):
    form_class = ApplicationForm
    model = Person
    template_name = 'base/application.html'
    redirect_field_name = 'Thankyou'
Вернуться на верх