使用datetimelocal的Datetime验证错误

2024-10-03 15:32:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试呈现基本HTML模板,该模板允许我使用datetime-local输入类型将日期时间值输入数据库。然而,每次我尝试输入一个值时,它总是返回Enter a valid date/time错误

models.py

class AirframeOperation(models.Model):
    id = models.AutoField(primary_key=True)
    takeoff = models.DateTimeField()
    landing = models.DateTimeField()
    flight_time = models.DurationField()
    metadata = models.OneToOneField(
        Metadata,
        on_delete=models.CASCADE
    )

    def save(self, *args, **kwargs):

        self.block_time = self.block_on - self.block_off
        self.flight_time = self.landing - self.takeoff
        return super(AirframeOperation, self).save(*args, **kwargs)

forms.py

class InsertAirframeOperation(forms.ModelForm):

    takeoff = forms.DateTimeField(
        input_formats=['%d-%m-%YT%H:%M'],
        widget=forms.DateTimeInput(
            attrs={
                'type': 'datetime-local',
                'class': 'form-control'
            },
            format='%d-%m-%YT%H:%M')
    )

    landing = forms.DateTimeField(
        input_formats=['%d-%m-%YT%H:%M'],
        widget=forms.DateTimeInput(
            attrs={
                'type': 'datetime-local',
                'class': 'form-control'
            },
            format='%d-%m-%YT%H:%M')
    )

    class Meta:
        model = AirframeOperation
        fields = ['takeoff', 'landing']
        widgets = {}

views.py

@login_required(login_url='/accounts/login/')
def dataentry(request):                                   
    if request.method == 'POST':
        form_meta = forms.InsertMetadata(request.POST)
        form_airframe = forms.InsertAirframeOperation(request.POST)
        print(form_airframe.errors)
        metadata = None
        if form_meta.is_valid():
            metadata = form_meta.save(commit=False)
            metadata.save()
            meta_id = metadata.id
            print(meta_id)
            metadata = Metadata.objects.get(id=meta_id)
        if form_airframe.is_valid():
            airframe = form_airframe.save(commit=False)
            airframe.metadata = metadata
            airframe.save()
        return redirect('/')
    else:
        form_meta = forms.InsertMetadata()
        form_airframe = forms.InsertAirframeOperation()
        return render(request, "dashboard/data_entry.html", {'form': form_meta, 'form2': form_airframe})

data_entry.html

{% extends "base.html" %}

{% block content %}
<div id="data_entry_container">
    <h3>Metadata General</h3>
    <form method="post" action="" enctype="multipart/form-data">
        {% csrf_token %}

        <p>{{ form.errors }}</p>
        <p>{{ form.non_field_errors }}</p>
        {{ form.as_p }}

        <h3>Airframe Operation Metadata</h3>
        <p>{{ form2.errors }}</p>
        <p>{{ form2.non_field_errors }}</p>
        {{ form2.as_p }}

         <input type="submit" value="Save">
    </form>

</div>

{% endblock content %}

我已经试着查找文档以及尝试列出的解决方案here,但仍然无法正确验证


Tags: selfformidtimemodelsrequestsaveforms
1条回答
网友
1楼 · 发布于 2024-10-03 15:32:57

不要在字段本身上声明“input_formats”,而是尝试在init上声明它

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.fields["takeoff"].input_formats = ["%Y-%m-%dT%H:%M"]

我已经为同一个问题绞尽脑汁大约一个小时了,除了这个,似乎什么也没用

应该注意的是,正如文档(https://docs.djangoproject.com/en/3.0/ref/forms/fields/)中所述,DateTimeField应该接受可选参数“input_formats”。但至于为什么它不起作用,我不知道

如果有人能比我更好地解释这个问题,请做

相关问题 更多 >