Django Inlines и DateTimeField

Я пытаюсь создать простое приложение Event, поэтому я решил создать событие и некоторые встроенные события:

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, и даже метки для этих полей ничего не говорят:

Скриншот

Кто-нибудь знает, как использовать эти виджеты внутри строк? Что я делаю неправильно?

заранее спасибо, Майкл

1 ответ

Решение

Похоже, проблема в том, что вы объявляете start_date а также end_date поля в EventOccurenceForm класс без каких-либо аргументов.

Вот цитата из документации Django "Создание форм из моделей" в разделе " Переопределение типов полей по умолчанию или виджетов ":

Если вы явно создаете экземпляр поля формы, подобного этому, Django предполагает, что вы хотите полностью определить его поведение; следовательно, атрибуты по умолчанию (такие как max_length или же required) не взяты из соответствующей модели. Если вы хотите сохранить поведение, указанное в модели, вы должны явно установить соответствующие аргументы при объявлении поля формы.

Почему вы объявляете start_date а также end_date поля в EventOccurenceForm класс вообще? Это потому, что вы пытаетесь иметь только эти два поля в форме? Если это так, вы должны использовать fields атрибут внутреннего Meta класс вместо.

Я предполагаю EventOccurence модели start_date а также end_date поля DateFieldи, таким образом, внутри администратора Django они будут иметь AdminDateWidget виджет по умолчанию. Если по какой-то причине это не так и вы не можете изменить модель, вы всегда можете использовать widgets атрибут EventOccurenceForm класс внутри Meta класс, как это:

from django.contrib.admin.widgets import AdminDateWidget

class EventOccurenceForm(TranslatableModelForm):
    class Meta:
        model = models.EventOccurence
        widgets = {
            'start_date': AdminDateWidget,
            'end_date': AdminDateWidget,
        }
Другие вопросы по тегам