python - Django Forms - DateInput 没有从实例中填充
问题描述
我正在尝试为包含 DateField 的 Django 模型设置编辑表单。我已将此字段设置为 forms.py 中的 forms.DateInput。这适用于创建模型的新实例,但是当我尝试使用现有实例填充表单时,即使所有其他字段都正确填充,DateInput 字段仍为空白。
如果我恢复到默认的 TextField 输入,那么数据会被正确调用。我还尝试在 DateInput 小部件中设置格式。
模型.py
class Rider(models.Model):
first_name = models.CharField(max_length=40)
surname = models.CharField(max_length=40)
MALE = 'M'
FEMALE = 'F'
GENDER_CHOICES = [
(MALE, 'Male'),
(FEMALE, 'Female'),
]
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
dob = models.DateField("Date of Birth", auto_now = False, auto_now_add = False)
club = models.CharField(max_length=50,blank=True, null=True)
bc_number = models.IntegerField("British Cycling Membership Number", blank=True, null=True)
linked_account = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, default=1)
视图.py
def rider_edit(request, pk):
rider = get_object_or_404(Rider, pk=pk)
if request.method == "POST":
form = RiderForm(request.POST, prefix='rider', instance=rider)
if form.is_valid():
rider = form.save(commit=False)
rider.linked_account = request.user
rider.save()
return redirect('rider_list')
else:
form = RiderForm(prefix='rider', instance=rider)
return render(request, 'riders/rider_new.html', {'riderform': form})
表格.py
from django import forms
from .models import Rider, MedicalInfo
class RiderForm(forms.ModelForm):
class Meta:
model = Rider
fields = ('first_name', 'surname', 'gender', 'dob', 'club', 'bc_number')
widgets= {
'dob': forms.DateInput(attrs={'type': 'date'}, format='%d/%m/%Y')
}
Rider_new.html
<h2>New Rider</h2>
<form method="POST" class="post-form">
{% csrf_token %}
{{ riderform.as_p }}
<button type="submit" class="save btn btn-default">Add Rider</button>
</form>
dob 字段是唯一没有从数据库正确填充的字段,它应该以 dd/mm/YYYY 格式显示日期,例如“10/09/2010”。它实际上显示了默认的“dd/mm/YYYY”。
解决方案
我找到了解决这个问题的方法,数据库中的日期以“%d/%m/%Y”格式返回,但表单上的输入是“日期”类型,需要输入格式为“% Y-%m-%d",通过改变:
widgets= {
'dob': forms.DateInput(format=('%d/%m/%Y'), attrs={'class':'form-control', 'placeholder':'Select Date','type': 'date'})
}
至:
widgets= {
'dob': forms.DateInput(format=('%Y-%m-%d'), attrs={'class':'form-control', 'placeholder':'Select Date','type': 'date'})
}
因此,生成的 HTML 表单由:
<input type="date" name="rider-dob" value="10/09/2010" class="form-control" placeholder="Select Date" required="" id="id_rider-dob">
至:
<input type="date" name="rider-dob" value="2010-09-10" class="form-control" placeholder="Select Date" required="" id="id_rider-dob">
推荐阅读
- javascript - 想要将单选和复选框值从一种形式转移到另一种形式
- react-native - 反应原生选项卡导航器切换按钮snipples?
- javascript - 从画布中获取 webgl 纹理
- bash - `git clone` 到 $GOPATH 没有`go get`?
- java - 在 kotlin 中使用 java 自定义注解
- julia - 如何在 Julia 中查找和替换 AST 的子表达式
- c# - 如何从 lambda 函数访问 S3 存储桶中的文件
- spring - Spring Batch:如何设置 FlatFileItemReader 来读取 json 文件?
- php - SMTP:客户端:535 5.7.3 身份验证不成功
- python - 将数字的最后 n 位转换为零