- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Django 中的表单可能很复杂。 Formsets 会让你想退出 Django。我就在那个时候。
有哪些不同的用例以及使用哪个(哪些)用例的注意事项?
我正在寻找关于何时使用每个工厂的更好指导,因为它们似乎取决于您何时知道什么类型的表单、字段,以及您是否正在创建、编辑或删除(整个单个表单或父模型)。我已经阅读了许多演练,但我很难看到更大的图景,尤其是当我试图从基于函数的 View 转移到基于类的 View 时。
下面是一些带有假设/限制的伪代码,以帮助您帮助我理解差异。提供伪代码可能会有所帮助,例如Formset 搭配什么样的Form(ModelForm 或regular),或者应该是什么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
同时:
ModelForms
? (意味着您将如何处理分配 Meal
其 Reservation
) Meal
是的,但你仍然需要做一个 Reservation
同时/相同的观点。 Dish
你会做饭,因为预订会告诉你。 MealPhotos
不会存在,因为这顿饭还没有准备好。 Reservation
说:
ModelForms
? Meal
是的,你有一个 Reservation
Reservation
为餐点分配菜肴,并且您有足够的信息可以这样做,并且可以轻松使用 ModelForm,但不是必需的 ModelForms
? Meal
, Reservation
, 和 Dishes
Dish
最佳答案
3个formset工厂的区别基本上是:
modelformset_factory(Dish, fields=('name'))
inlineformset_factory(Meal, Dish)
编辑属于单餐的多道菜
inlineformset_factory
,我们必须在呈现表单的 View 中创建 Meal 实例。像这样的东西:
DishFormSet = inlineformset_factory(Meal, Dish)
bday_dinner = Meal.objects.create(name='30th Birthday dinner')
formset = DishFormSet(instance=bday_dinner)
对于上传膳食照片的人,您可以使用:
PhotosFormSet = inlineformset_factory(Meal, MealPhotos)
bday_dinner = Meal.objects.get(name='30th Birthday dinner')
formset = PhotosFormSet(instance=bday_dinner)
这告诉 Django 所有提交的照片都与那顿饭相关联,但允许将每张照片分配到不同的盘子(通过表单中的下拉菜单)。
ModelFormset(Dish)
在创建这些之后,将它们链接到处理表单提交的 Django View 中的 Meal。
关于Django formset_factory vs modelformset_factory vs inlineformset_factory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53035151/
我在我的一个 View 中使用了 django modelformset_factory。我正在使用 javascript 向模板中的表单集添加新表单。一切正常,但我的问题是,当我尝试使用 model
我需要从我的查询中过滤掉大量的对象。目前,它正在抓取类中的所有对象,我想将其过滤为查询字符串中的相关对象。我怎样才能做到这一点?当我尝试时,我收到一个属性错误说明 ''QuerySet' object
使用 modelformset_factory 时,如何从数据库中删除在表单中标记为删除的对象? 我像这样创建我的 modelformset_factory: ItemFormset = modelf
关于这些模型: class Projects(models.Model): projectDescription = models.CharField(max_length=50,blank=
我仍在与表单集作斗争,我无法真正理解为什么会出现此错误: u'ManagementForm 数据丢失或已被篡改 这是我的代码:请指出我的错误并帮助我解决这个问题。 @csrf_protect @tra
Django :1.4.1 模型: class Hoja(models.Model): nombre = models.CharField(max_length=200) # requerid
我一直在尝试遵循教程和其他 SO 问题,并有一个 modelformset_factory 显示 html 中看起来像表单的列表,但事实证明它们不是实际的表单。 显示的html: C
为简单模型创建了一组表单。当我尝试更改表单中的模型对象数据并将这些更改保存在数据库中时,新数据不会因此保存,并且会重定向到具有相同数据的表单页面,尽管至少有关于应该输出操作的成功或失败。终端不返回任何
基于 this关于 formset_factory 的回答,我尝试对 modelformset_factory 做同样的事情: from django.utils.functional import
我正在使用 modelformset_factory。 如何在生成的每个表单字段中添加占位符文本? 例如,我有 AdvisorsFormSet = modelformset_factory( S_Ad
我使用 modelformset_factory 创建了一个简单的联系表单,以使用数据库模型在 View 中构建表单。我遇到的问题是 save() 之前的 is_valid() 检查不起作用。当我提交
Django 中的表单可能很复杂。 Formsets 会让你想退出 Django。我就在那个时候。 有哪些不同的用例以及使用哪个(哪些)用例的注意事项? 我正在寻找关于何时使用每个工厂的更好指导,因为
假设我有一个联系人对象,我想在 django(1.8) 中拥有两组联系人表单集,并按 html 模板中的 fieldset 标签划分。我使用 modelformset_factory。无论我使用一两个
我正在使用模型表单集一次添加模型的多个实例。我正在使用基于类的 View 。这是我的views.py 用于创建“库”的部分 class LibraryCreate(View): model = Lib
我正在使用 Django 模型继承来创建两个模型 - WorkAttachmentPicture 和 WorkAttachmentAudio class WorkAttachment(models.M
我正在构建一个 View ,可以让我同时更新多个对象上的多个字段。我正在使用 执行此操作ModelFormSet & modelformset_factory . 该模板将是一个表单表,字段左侧带有对
我在创建新产品时遇到了不保存图像的挑战。表单呈现得很好,图像已上传,但从未保存,直到我使用管理员上传并保存它,即当它在我创建的产品上可见时。 我认为我在views.py中的类ProductCreate
我正在尝试使用 django modelformset_factory 在 django 中创建学生出勤表...但是当我保存表单集时,它显示 id 无效,这是我的实现 我有两个模型:StudentAt
我的 models.py 看起来像这样: class Member(models.Model): name = models.CharField(max_length=255) occ
我是一名优秀的程序员,十分优秀!