在Django管理应用程序中使用自定义表单

时间:2012-12-23 22:50:35

标签: django django-forms django-admin

我基于Django的应用维护有一个预订日历,使用两个类建模:CalendarCalendarDayCalendar是各种模型类的集合,其中包括CalendarDayCalendarDay是实际的“肉”,并保存预订信息。

在管理员应用程序中,我想将两个模型类一起显示为日历:连续x个月,每个月格式化为日历月(顶部的星期几和每周格式化的日期)

由于这超出了标准Django管理界面的功能,我正在研究使用最少的修改在Admin界面中实现此功能的可能性。到目前为止,我已经提出了以下方法:

  1. 使用Django Forms API创建自定义表单类。

  2. 以某种方式在管理员应用程序中注册自定义表单类。

  3. 创建自定义模板以将表单呈现为HTML。

  4. 以某种方式将自定义表单绑定到从管理应用程序中的列表显示中选择的Calendar实例。我知道通过将数据字典传递给构造函数可以将表单绑定到数据但是我不知道如何使用管理表单执行此操作。

  5. 我的问题:这是一种可行的方法,如果是这样,我将如何进行[2]和[4]?

1 个答案:

答案 0 :(得分:3)

实际上比我想象的容易得多。我最终实现了一个基于this post的自定义小部件以及HTMLCalendar的子类。

修改 虽然这个答案中描述的方法有效,但我对最终结果并不完全满意。它最终成为一个相当复杂的黑客。我按照我的问题中描述的原始思路重新设计了解决方案,这也很简单:

  • 我按照here所述移动了change_form.html文件。
  • 我修改了该模板并添加了一个新块以包含模板 能够提供预订日历。
  • 我将Python的HTMLCalendar类子类化,因此它具有能力 处理CalendarDay模型的Calendar个对象 生成所需的CSS styles以显示各种状态 日历中的每一天。

在初始创建新Calendar时,模板会向用户正常显示一条消息,表明还没有CalendarDay个对象。

最终结果:

enter image description here