Как "исправить" пользовательский ввод на странице администрирования django datetime input

У меня есть модель Itineraries, которая имеет табличнуюInline модель ItineraryDetails, содержащую время назначения, прибытия и отправления. Я хочу позволить пользователям вводить 09302025 и 700 для каждого поля времени, но не могу заставить это работать.

Админка Django ищет корректные объекты datetime перед сохранением, и поскольку они не являются корректными, их нельзя сохранить. Я пробовал save_model и save_related, но они не принимают недействительный формат datetime

Кажется, я нашел решение, используя виджеты django. Возможно, это немного излишне, но, кажется, это работает.

class CustomDateTimeInput(DateTimeInput):
    input_type = 'datetime-local'
    format = '%Y-%m-%d %H:%M'

    def __init__(self, attrs=None):
        final_attrs = {'placeholder': 'YYYY-MM-DD HH:MM'}
        if attrs:
            final_attrs.update(attrs)
        super().__init__(attrs=final_attrs)


class ItineraryDetailsForm(forms.ModelForm):
    departure_time = forms.DateTimeField(
        widget=CustomDateTimeInput,
        input_formats=['%Y-%m-%d %H:%M'],
        required=False
    )
    arrival_time = forms.DateTimeField(
        widget=CustomDateTimeInput,
        input_formats=['%Y-%m-%d %H:%M'],
        required=False
    )

    class Meta:
        model = ItineraryDetails
        fields = ['destination', 'arrival_time', 'departure_time', 'type']

    def clean_departure_time(self):
        departure_time = self.cleaned_data['departure_time']
        if departure_time:
            departure_time = departure_time.strftime('%Y-%m-%d %H:%M')
        return departure_time

    def clean_arrival_time(self):
        arrival_time = self.cleaned_data['arrival_time']
        if arrival_time:
            arrival_time = arrival_time.strftime('%Y-%m-%d %H:%M')
        return arrival_time


class ItineraryDetailsInline(admin.TabularInline):
    model = ItineraryDetails
    form = ItineraryDetailsForm
    extra = 0
Вернуться на верх