1

我正在尝试创建简单的事件应用程序,所以我决定创建事件和一些内联事件发生:

class EventOccurenceInline(admin.TabularInline):
    model = models.EventOccurance
    form = forms.EventOccuranceForm
    pass


class EventAdmin(TranslatableAdmin):
    list_display = [ "internal_name"]
    inlines = [
        EventOccurenceInline,
    ]
    pass

这是forms.py:

class EventOccurenceForm(TranslatableModelForm):
    start_date = forms.DateTimeField()
    end_date = forms.DateTimeField()
    class Meta:
        model = models.EventOccurence

但是,当我打开后端时,我只看到简单的输入而不是 DateTime 选择器,甚至这些字段的标签也没有说明:

截屏

有谁知道如何在内联中使用这些小部件?我究竟做错了什么?

在此先感谢,迈克尔

4

1 回答 1

2

看起来问题在于您在没有任何参数的情况下在类中声明start_dateandend_date字段。EventOccurenceForm

以下是 Django 在覆盖默认字段类型或小部件部分中的“从模型创建表单”文档中的引用:

如果你像这样显式地实例化一个表单域,Django 假设你想要完全定义它的行为;因此,默认属性(例如max_lengthrequired)不是从相应的模型中提取的。如果要保持模型中指定的行为,则必须在声明表单字段时显式设置相关参数。

无论如何,您为什么要在类中声明start_dateandend_date字段EventOccurenceForm?是因为您试图在表单中只包含这两个字段吗?如果是这种情况,您应该改用fields内部Meta类的属性。

我假设EventOccurence模型start_dateend_date字段是DateFields ,因此,在 Django admin 中,AdminDateWidget默认情况下它们将具有小部件。如果由于某种原因不是这种情况并且您无法更改模型,则始终可以使用该类的内部类的widgets属性,如下所示:EventOccurenceFormMeta

from django.contrib.admin.widgets import AdminDateWidget

class EventOccurenceForm(TranslatableModelForm):
    class Meta:
        model = models.EventOccurence
        widgets = {
            'start_date': AdminDateWidget,
            'end_date': AdminDateWidget,
        }
于 2013-01-29T04:59:45.417 回答