Django formset_factory与modelformset_factory与inlineformset_factory

问题描述 投票:11回答:1

在Django中,表单可能很复杂。表单集可以使您想退出Django。我在那个时候。

[有哪些不同的用例,并考虑使用哪个?

我正在寻找有关何时使用每个工厂的更好的指导,因为它们似乎取决于您何时知道什么类型的表单,字段以及是否要创建,编辑或删除(完全是单个表单)或完全是父模型)。我已经阅读了许多演练,但是正在努力查看大图,尤其是当我尝试从基于函数的视图转换为基于类的视图时。

下面是一些带有假设/限制的伪代码,以帮助您帮助我理解不同之处。提供伪代码可能会有所帮助,例如哪种类型的表单(ModelForm或常规)与Formset一起使用,或者应该从表单中选择哪种形式,因为这似乎是创建具有关系的表单的趋势。

假设您有一些型号:

pop

并且您想创建一个新的class Dish(models.Model): name = models.CharField(max_length=50) class Meal(models.Model): name = models.CharField(max_length=50) dishes = models.ManyToManyField(Dish, # through='OPTIIONALMealDishIntermediaryClassTable', related_name="meal") class Reservation(models.Model): date = models.DateTimeField() greeting = models.CharField(max_length=255) meal = models.OneToOneField(Meal, on_delete=models.CASCADE) class MealPhotos(models.Model): photo = models.OneToOneField(Photo, on_delete=models.CASCADE, related_name='mealPhoto') meal = models.ForeignKey(Meal, on_delete=models.CASCADE) # optional, so a photo can be attached to a dish if the picture is just of the dish dish = models.ForeignKey(Dish, blank=True, null=True, on_delete=models.CASCADE) ,您想同时发送一个Meal

  • 您将使用哪个工厂?
  • 是否取决于表格是否全部为Reservation? (表示您将如何处理ModelFormsMeal分配)
  • 假设:
    • 在此阶段,您知道它是哪个Reservation,但是您仍然必须同时制作Meal /相同的视图。
    • 您不知道要煮哪个Reservation,因为预订会告诉您。
    • Dish尚不存在,因为尚未准备好餐点。
    • 您要在同一表格/屏幕上创建餐点和预订

然后,您要根据MealPhotos的说明添加一些菜肴:

  • 您将使用哪个工厂?
  • 取决于表格是否全部为Reservation
  • 假设:
    • 在此阶段,您知道它是ModelForms,并且您有一个Meal
    • 您将基于Reservation将餐点分配给餐点,并且您有足够的信息来这样做,并且可以轻松地使用ModelForm,但不是必需的]]
  • 后来,吃这道菜的人想拍照,而你不知道要拍多少张

  • 您将使用哪个工厂?
  • 取决于表格是否全部为Reservation
  • 假设:
    • 我们将要求他们至少接受两个
    • 我们可以访问ModelFormsMealReservation
    • 可以选择将照片分配给Dishes

在Django中,表单可能很复杂。表单集可以使您想退出Django。我在那个时候。有哪些不同的用例,以及要使用哪些用例的注意事项?我在寻找...

django django-forms formset inline-formset
1个回答
0
投票

3个表单工厂之间的区别基本上是:

© www.soinside.com 2019 - 2024. All rights reserved.