【问题标题】:Using custom forms in Django admin app在 Django 管理应用程序中使用自定义表单
【发布时间】:2012-12-10 12:30:01
【问题描述】:

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

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

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

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

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

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

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

我的问题:这是一种可行的方法吗?如果可行,我将如何处理 [2] 和 [4]?

【问题讨论】:

  • 您是否考虑过使用一些 JS MVC 框架/库,例如 angularjs 加上 django-tastypie
  • 不,一开始不是。我很想知道这是否可以在 Django 的可能性范围内实现。

标签: django django-forms django-admin


【解决方案1】:

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

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

  • 我按照here 的描述移动了change_form.html 文件。
  • 我修改了该模板并添加了一个新块以包含一个模板 能够呈现预订日历。
  • 我继承了 Python 的 HTMLCalendar 类,以便它能够 处理Calendar 模型的CalendarDay 对象和 生成所需的CSS styles 以显示各种状态 日历中的每一天。

在初始创建新的Calendar 时,模板会优雅地向用户显示一条消息,即尚无CalendarDay 对象。

最终结果:

【讨论】:

    猜你喜欢
    • 2014-05-04
    • 2019-08-07
    • 2013-08-26
    • 2018-10-27
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多