【发布时间】:2019-04-01 18:34:38
【问题描述】:
在 Django 中表单可能很复杂。 Formsets 可以让你想要退出 Django。我就在那个时候。
有哪些不同的用例以及使用哪一个的注意事项?
我正在寻找关于何时使用每个工厂的更好指导,因为它们似乎取决于您何时知道什么类型的表单、字段,以及您是否正在创建、编辑或删除(单个表单完全或完全是父模型)。我已经阅读了许多演练,但很难看到更大的图景,尤其是当我试图从基于函数的视图转移到基于类的视图时。
以下是一些带有假设/限制的伪代码,可帮助您帮助我理解差异。提供伪代码可能会有所帮助,例如 Formset 使用哪种表单(ModelForm 或常规),或者表单中的 popped 应该是什么,因为这似乎是创建具有关系的表单的趋势。
假设你有一些模型:
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:
- 您会使用哪个工厂?
- 是否取决于表格是否都是
ModelForms? (意味着你将如何处理分配Meal其Reservation) - 假设:
- 在这个阶段你知道它是哪个
Meal,但你仍然需要同时/相同的视图制作Reservation。 - 您不知道要烹饪哪个
Dishes,因为预订会告诉您。 -
MealPhotos还不存在,因为这顿饭还没准备好。 - 您想在同一个表单/屏幕上创建餐点和预订
- 在这个阶段你知道它是哪个
然后,您想根据Reservation 所说的内容添加一些菜肴:
- 您会使用哪个工厂?
- 是否取决于表格是否都是
ModelForms? - 假设:
- 在这个阶段你知道
Meal是哪个Reservation - 您将根据
Reservation为餐点分配菜肴,并且您有足够的信息来执行此操作,并且可以轻松使用 ModelForm,但不是必需的
- 在这个阶段你知道
后来吃菜的人要拍几张照片,不知道要拍几张
- 您会使用哪个工厂?
- 是否取决于表格是否都是
ModelForms? - 假设:
- 我们将要求他们至少参加两次
- 我们可以访问
Meal、Reservation和Dishes - 可以选择将照片分配给
Dish
【问题讨论】:
-
我对表格也有同样的看法。似乎它们是在考虑一些非常具体的用途的情况下构建的,如果你需要一些不同的东西,那么让所有部分很好地协同工作就变成了地狱。也在这里等待答案
标签: django django-forms formset inline-formset