如何“修复”django 管理页面日期时间输入上的用户输入

问题描述 投票:0回答:1

我有一个模型行程,其中有一个表格内联模型行程详细信息,其中包含目的地、到达和出发时间。我想允许用户为每个日期时间字段输入 09302025 和 700,但我似乎无法让它工作。

Django 管理员在保存之前查找有效的日期时间对象,由于这些对象无效,因此无法保存它们。我尝试过 save_model 和 save_lated,但他们不接受无效的日期时间格式

django datetime django-admin
1个回答
0
投票

我想我已经找到了使用 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
© www.soinside.com 2019 - 2024. All rights reserved.