python - Django——“输入一个有效的日期。” 更新模型时出错
问题描述
但是当我使用“runserver”命令重新启动服务器时,它只工作一次,但是当我再次尝试编辑模型时,它再次显示错误。DateTime 字段没有显示错误,我的项目中的所有模型都发生了同样的事情
Django 版本: Django-3.2.3 Python 版本: 3.8
我的错误 图片
我的模特
from django.db import models
from django.urls import reverse
from django.contrib.auth.models import User
from django.utils.timezone import now
from products.models import Products
from organizations.models import Persons, Companies
ORDER_STATUS_CHOICES = [
('Processing', 'Processing'),
('Confirmed', 'Confirmed'),
('Delivered', 'Delivered'),
]
def increment_order_number():
last_order = Orders.objects.all().order_by('id').last()
if not last_order:
return 'FEO-0001'
order_number = last_order.order_no
order_int = int(order_number.split('FEO-')[-1])
new_order_int = order_int + 1
new_order_no = ''
if new_order_int < 10:
new_order_no = 'FEO-000' + str(new_order_int)
if 100 > new_order_int >= 10:
new_order_no = 'FEO-00' + str(new_order_int)
if 100 <= new_order_int < 1000:
new_order_no = 'FEO-0' + str(new_order_int)
if new_order_int >= 1000:
new_order_no = 'FEO-' + str(new_order_int)
return new_order_no
# model for order
class Orders(models.Model):
order_no = models.CharField(max_length=10, unique=True, default=increment_order_number)
person_name = models.ForeignKey(Persons, on_delete=models.CASCADE, null=True)
company_name = models.ForeignKey(Companies, on_delete=models.CASCADE, null=True)
product_name = models.ForeignKey(Products, on_delete=models.CASCADE, null=True)
total_weight = models.FloatField(max_length=10)
rate_per_kg = models.FloatField(max_length=10)
percentage_of_fotka = models.FloatField(max_length=10)
percentage_of_moisture = models.FloatField(max_length=10)
delivery_deadline = models.DateField(default=now)
date_ordered = models.DateTimeField(default=now)
added_by = models.ForeignKey(User, on_delete=models.CASCADE)
order_status = models.CharField(max_length=20, null=True, choices=ORDER_STATUS_CHOICES, default='Processing')
remarks = models.CharField(max_length=500, blank=True)
def __str__(self):
return str(self.order_no)
@staticmethod
def get_absolute_url():
return reverse('order-list')
我的观点
from django.shortcuts import render
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import ListView, CreateView, UpdateView, DeleteView
from . import forms
from .models import Orders
class OrderCreateView(LoginRequiredMixin, CreateView):
model = Orders
template_name = 'orders/order_add_form.html'
fields = ('order_no', 'person_name', 'company_name',
'product_name', 'total_weight', 'rate_per_kg', 'percentage_of_fotka', 'percentage_of_moisture',
'delivery_deadline', 'date_ordered', 'order_status', 'remarks')
def form_valid(self, form):
form.instance.added_by = self.request.user
return super().form_valid(form)
class OrderListView(LoginRequiredMixin, ListView):
model = Orders
template_name = 'orders/order_list.html'
context_object_name = 'orders'
paginate_by = 20
class OrderUpdateView(LoginRequiredMixin, UpdateView):
model = Orders
template_name = 'orders/order_update_form.html'
fields = '__all__'
class OrderDeleteView(LoginRequiredMixin, DeleteView):
model = Orders
template_name = 'orders/order_confirm_delete.html'
success_url = '/order_list'
我的模板
{% extends "main/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="container">
<h5 class="text-center">Update Order</h5>
<form method="post" >
{% csrf_token %}
<div class="form-row">
<div class="form-group col-md-6 mb-0">
{{ form.order_no|as_crispy_field }}
</div>
<div class="form-group col-md-6 mb-0">
{{ form.person_name|as_crispy_field }}
</div>
<div class="form-group col-md-6 mb-0">
{{ form.company_name|as_crispy_field }}
</div>
<div class="form-group col-md-6 mb-0">
{{ form.product_name|as_crispy_field }}
</div>
<div class="form-group col-md-6 mb-0">
{{ form.total_weight|as_crispy_field }}
</div>
<div class="form-group col-md-6 mb-0">
{{ form.rate_per_kg|as_crispy_field }}
</div>
<div class="form-group col-md-3 mb-0">
{{ form.percentage_of_fotka|as_crispy_field }}
</div>
<div class="form-group col-md-3 mb-0">
{{ form.percentage_of_moisture|as_crispy_field }}
</div>
<div class="form-group col-md-3 mb-0">
{{ form.date_ordered|as_crispy_field }}
</div>
<div class="form-group col-md-3 mb-0">
{{ form.delivery_deadline|as_crispy_field }}
</div>
<div class="form-group col-md-6 mb-0">
{{ form.order_status|as_crispy_field }}
</div>
<div class="form-group col-md-6 mb-0">
{{ form.remarks|as_crispy_field }}
</div>
<div class="form-group col-md-6 mb-0">
{{ form.added_by|as_crispy_field }}
</div>
</div>
<button class="btn btn-outline-info" type="submit">Update</button>
</form>
</div>
{% endblock content %}
解决方案
在 settings.py 中设置DATE_INPUT_FORMATS
如下:
DATE_INPUT_FORMATS = ['%Y-%m-%d']
或者
尝试这个:
widgets = {
'delivery_deadline': forms.DateInput(format=('%Y-%m-%d'), attrs={'class':'form-control', 'placeholder':'Select a date', 'type':'date'}),
}
推荐阅读
- tensorflow - 您必须使用 dtype float 和 shape [?,3] 为占位符张量“X_1”提供一个值
- javascript - 如何检查哪种类型的元素行包含选择或输入?
- jquery - 通过jquery选择第二类元素
- amazon-web-services - AWS 中的 UDP/TCP 服务器
- python-3.x - 在python中使用google transliterate api
- python - 子类LoginView时,Django'NoneType'对象没有属性'has_header'
- android - 如何为每个android用户安排firebase数据库项目
- python - 使用缩放和平方方法而不是欧拉方法进行积分
- google-sheets - 记录电子表格中的更改
- sql - sql根据两列中的某个值添加具有唯一ID的列