【问题标题】:Django Forms - DateInput not populating from instanceDjango Forms - DateInput 没有从实例中填充
【发布时间】:2020-02-06 05:42:10
【问题描述】:

我正在尝试为包含 DateField 的 Django 模型设置编辑表单。我已将此字段设置为 forms.py 中的 forms.DateInput。这适用于创建模型的新实例,但是当我尝试使用现有实例填充表单时,即使所有其他字段都正确填充,DateInput 字段仍为空白。

如果我恢复到默认的 TextField 输入,那么数据会被正确调用。我还尝试在 DateInput 小部件中设置格式。

models.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)

views.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})

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 格式显示日期,例如“2010 年 10 月 9 日”。它实际上显示了默认的“dd/mm/YYYY”。

【问题讨论】:

    标签: python django django-forms


    【解决方案1】:

    我找到了问题的解决方案,数据库中的日期以“%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">
    

    【讨论】:

      猜你喜欢
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      相关资源
      最近更新 更多