Django:如何在单个视图中添加多个基于类的表单?

时间:2019-04-10 16:30:13

标签: python django django-models django-forms django-views

在我的models.py中,我有一个父类,有一个孩子和一个孙子类。父母与孩子有一对多的关系,孩子与孙子有一对多的关系。

我想创建一个视图(最好是基于类的视图,因为这些似乎最容易实现),其中包括3种基于类的表单,一种用于父级,一种用于子级,另一种用于孙代。

我想要得到的是一个视图,在该视图中,我可以提交一个表单,该表单将创建一个有多个子孙和多个孙子孙的父母。

我将如何最好地设计这种视图?

models.py:

class Parent(models.Model):
    parent_propery_one = models.CharField(max_length=200)
    parent_propery_two = models.CharField(max_length=100)
    parent_propery_three = models.TextField()
    parent_property_four = models.URLField(max_length=300, null=True)
    parent_property_five = models.DateTimeField(default=timezone.now)
    parent_property_six = models.DateTimeField(auto_now=True)
    parent_property_seven = models.ForeignKey(User, on_delete=models.PROTECT)

...

class Child(models.Model):
    child_propery_one = models.CharField(max_length=200, unique=True)
    child_property_two = models.ForeignKey(Vilt, default=1, verbose_name="Bierviltje", on_delete=models.PROTECT)
    child_property_three = models.BooleanField()

...

class Grandchild(models.Model):
    grandchild_property_one = models.CharField(max_length=200)
    grandchild_property_two = models.ForeignKey(Pand, default=1, verbose_name="Pand", on_delete=models.PROTECT)
    grandchild_property_three = models.DecimalField(max_digits=4, decimal_places=2)
    grandchild_property_four = models.PositiveIntegerField()
    grandchild_property_five = models.DecimalField(max_digits=8, decimal_places=2)
    grandchild_property_six = models.DecimalField(max_digits=8, decimal_places=2, default=0)
    grandchild_property_seven = models.DecimalField(max_digits=8, decimal_places=2, default=0)
    grandchild_property_eight = models.DecimalField(max_digits=8, decimal_places=2)

views.py

class ParentCreateView(LoginRequiredMixin, CreateView):
    model = Parent
    template_name = 'parent/parent_form.html'
    fields = ['parent_property_one', 'parent_property_two', 'parent_property_three', 'parent_property_four', 'parent_property_five', 'parent_property_six']
    context_object_name = 'parents'

使用此代码,它显然仅返回父类的表单。我也想在此视图中添加基于子类和子类的表单。最好的方法是什么?

0 个答案:

没有答案