当前位置: 首页 > 面试题库 >

预填充内联FormSet?

吕森
2023-03-14
问题内容

我正在为一个乐队制作出勤表。我的想法是在表格的一部分中输入表演或排练的事件信息。这是事件表的模型:

class Event(models.Model):
    event_id = models.AutoField(primary_key=True)
    date = models.DateField()
    event_type = models.ForeignKey(EventType)
    description = models.TextField()

然后,我想使用一个内联FormSet,将乐队成员链接到事件并记录他们是否存在,不在场或被原谅:

class Attendance(models.Model):
    attendance_id = models.AutoField(primary_key=True)
    event_id = models.ForeignKey(Event)
    member_id = models.ForeignKey(Member)
    attendance_type = models.ForeignKey(AttendanceType)
    comment = models.TextField(blank=True)

现在,我想做的是使用所有当前成员的条目预填充此内联FormSet,并默认将它们存在(大约60个成员)。不幸的是,在这种情况下 Django 不允许初始值。

有什么建议?


问题答案:

因此,你不会喜欢这个答案,部分是因为我尚未完成编写代码,部分是因为这需要大量工作。

当我自己遇到这个问题时,你需要做的是:

  1. 花大量时间阅读formset和model-formset代码以了解它们的工作原理(某些功能驻留在formset类上,而其中一些功能驻留在工厂函数中,这无济于事)他们)。在后续步骤中,你将需要此知识。
  2. 编写你自己的formset类,该类继承BaseInlineFormSet并接受initial。这里真正棘手的一点是,你必须重写__init__(),并且必须确保调用它BaseFormSet.__init__()而不是使用直接父级或祖父母级__init__()(因为它们分别是BaseInlineFormSetBaseModelFormSet,并且它们都不能处理初始数据)。
  3. 编写你自己的适当admin内联类的子类(在我的情况下是TabularInline),并重写其get_formset方法以返回inlineformset_factory()使用自定义formset类的结果。
  4. ModelAdmin具有内联的模型的实际子类上,重写add_viewchange_view,并复制大部分代码,但有一个大变化:构建表单集所需的初始数据,并将其传递给自定义表单集(由你的表单集返回ModelAdminget_formsets()方法)。
    我已经与Brian和Joseph进行了一些富有成效的聊天,以期为将来的Django版本进行改进。目前,模型表单集的工作方式使此问题变得比通常所要解决的麻烦多了,但是我想对它进行一些API清理非常简单。


 类似资料:
  • 基本步骤:-用户点击一个web按钮,此在线web应用程序背后的系统向用户发送一封带有PDF文档的电子邮件,该文档包含用户保存的应用程序的所有细节,例如全名、邮编、dob、一些问题的答案(tickboxes)、自由文本注释区-用户打开此PDF,更改一些细节,例如更新注释区的文本、取消勾选某些复选框、更改邮政代码-用户保存更改并将PDF发送回我们。-系统读取PDF、解析内容并更新数据库中的数据。 上述

  • 我拥有以下Neo4j SDN实体: 以及以下SDN存储库方法: 作为这个方法调用的结果,我有一个只有的对象。 如何更改此方法(或密码查询)以预填充也可以吗?

  • 问题内容: 引用首长html: 您可以将填充添加到内联元素的顶部和底部,但是该填充不会影响周围其他内嵌元素的间距,因此该填充将与其他内嵌元素重叠 a)据我所知,在行内元素的顶部和底部添加填充不会(曾经)对周围的元素产生任何影响,因此对页面外观没有影响? b)但是“ 填充将与其他内联元素重叠 ”到底是什么意思?它是否暗示在某些情况下填充(内联元素的顶部和底部)会影响页面的外观? 谢谢 问题答案: 如

  • 下面的php代码用于预填充输入框,但不适用于文本区域。问题是标准输入框的高度很小,所以文本显示在一行上。我尝试使用文本区域,但它出现空白时,呈现。代码显示了这两种方法,工作方法,然后是文本区域方法。有谁能给出建议吗?

  • 我们有输入文本显示与预填充值。我们使用的是使用ng repeat指令的list 当使用ng模型时,输入文本框上的AngularJS-Value属性是否被忽略?说明如何预填充输入文本。但不知何故,我们发现很难使用内部动态列表。我们能这样做吗?还是有更好的方法? 当我们这个代码,我们没有得到任何值在文本框,但在Chrome的开发人员控制台的元素选项卡签入;我们可以看到值正在更新,但不是在文本框。

  • 问题内容: 在Java中,如何创建在构建时填充的最终Set?我想做以下事情: 但是我不知道Java的正确语法。 问题答案: 试试这个成语: