我有一个模型行程,其中有一个表格内联模型行程详细信息,其中包含目的地、到达和出发时间。我想允许用户为每个日期时间字段输入 09302025 和 700,但我似乎无法让它工作。
Django 管理员在保存之前查找有效的日期时间对象,由于这些对象无效,因此无法保存它们。我尝试过 save_model 和 save_lated,但他们不接受无效的日期时间格式
我想我已经找到了使用 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