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