Как "исправить" пользовательский ввод на странице администрирования 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