无法使用 widget_tweaks 自动填充 django 模板中的日期字段

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

我正在构建一个 django 应用程序,它基本上是为法定监护人提供自动创建发票的服务。对于需要打印在发票上的患者的必要信息,我有一个模型患者:

class Patient(models.Model):
    address_as = models.ForeignKey('AddressAs', on_delete=models.PROTECT)
    first_name = models.CharField('First Name', max_length=120)
    last_name = models.CharField('Last Name', max_length=120)
    birthday = models.DateField('Birthday')
    guardian = models.ForeignKey('Guardian', on_delete=models.CASCADE)
    court = models.ForeignKey(Court, related_name='patients', on_delete=models.PROTECT)
    record_number = models.CharField('Record Number', max_length=50)
    first_billing_date = models.DateField('Start of Legal Care', null=True, blank=True)
    billing_start = models.DateField('Start of Billing', null=True, blank=True)
    billing_end = models.DateField('End of Billing', null=True, blank=True)
    last_billing = models.DateField('Last Billing Date', null=True, blank=True)
    dutyscope_financial = models.BooleanField('Dutyscope Financial Care')
    is_wealthy = models.BooleanField('Patient is wealthy', default=False)
    taken_from_volunteer = models.BooleanField('Taken from Volunteer', default=False)
    given_to_volunteer = models.BooleanField('Given to Volunteer', default=False)

    def __str__(self):
        return f'{self.last_name}, {self.first_name}, geb. {self.birthday}'

还有一个非常简单的表单类:

class PatientForm(forms.ModelForm):
    class Meta:
        model = Patient
        fields ='__all__'

当然还有创建患者的视图和模板。

到目前为止,一切都很好。一切正常。 但现在我想添加编辑患者数据的可能性。我为此创建了一个新视图:

def edit_patient(request, patient_id):
    patient = Patient.objects.get(id=patient_id)
    if request.method =='POST':
        form = PatientForm(request.POST or None, instance=patient)
        if form.is_valid():
            updated_patient = form.save()
            return HttpResponseRedirect(reverse('show-patients'))

    form = PatientForm(instance=patient)
    return render(request, 'edit-patient.html', {'form': form})

相应的模板(带有widget_tweaks和bootstrap):

{% extends 'base.html' %}

{% block content %}

{% load widget_tweaks %}

<h5 class="text-center">Einen Betreuten bearbeiten</h5>

<div class="container-xl">
    <form action="" method="POST">        
        {%csrf_token %}
        
        {% for hidden in form.hidden_fields %}
            {{ hidden }}
        {% endfor %}

        <label for="{{form.address_as.id_for_label }}">Anrede</label>
        <div class="input-group mb-4">
            <span class="input-group-text">
                <i class="bi bi-person-fill"></i>
            </span>
            {% render_field form.address_as class+='form-control' %}
        </div>

        <label for="{{ form.first_name.id_for_label }}">Vorname</label>
        <div class="input-group mb-4">
            <span class="input-group-text">
                <i class="bi bi-person-fill"></i>
            </span>
            {% render_field form.first_name placeholder='Vorname' class+='form-control' autocomplete='off' %}
        </div>

        <label for="{{ form.last_name.id_for_label }}">Nachname</label>
        <div class="input-group mb-4">
            <span class="input-group-text">
                <i class="bi bi-person-fill"></i>
            </span>
            {% render_field form.last_name placeholder='Nachname' class+='form-control' autocomplete='off' %}
        </div>

        <label for="{{ form.birthday.id_for_label }}">Geburtsdatum</label>
        <div class="input-group mb-4">
            <span class="input-group-text">
                <i class="bi bi-person-fill"></i>
            </span>
            {% render_field form.birthday type='date' class+='form-control' %}
        </div>
        
        <label for="{{ form.guardian.id_for_label }}">Betreuer</label>
        <div class="input-group mb-4">
            <span class="input-group-text">
                <i class="bi bi-person-fill"></i>
            </span>
            {% render_field form.guardian placeholder='Betreuer' class+='form-control' %}
        </div>

        
        <label for="{{ form.court.id_for_label }}">Zuständiges Betreuungsgericht</label>
        <div class="input-group mb-4">
            <span class="input-group-text">
                <i class="bi bi-person-fill"></i>
            </span>
            {% render_field form.court class+='form-control' %}
        </div>

        <label for="{{form.record_number.id_for_label }}">Aktenzeichen des Betreuungsgerichts</label>
        <div class="input-group mb-4">
            <span class="input-group-text">
                <i class="bi bi-person-fill"></i>
            </span>
            {% render_field form.record_number placeholder='Aktenzeichen' class+='form-control' autocomplete='off' %}
        </div>

        <label for="{{form.first_billing_date.id_for_label }}">Erster Vergütungstag alter Betreuer</label>
        <div class="input-group mb-4">
            <span class="input-group-text">
                <i class="bi bi-person-fill"></i>
            </span>
            {% render_field form.first_billing_date type='date' class+='form-control' %}
        </div>

        <label for="{{form.billing_start.id_for_label }}">Mein erster Vergütungstag</label>
        <div class="input-group mb-4">
            <span class="input-group-text">
                <i class="bi bi-person-fill"></i>
            </span>
            {% render_field form.billing_start type='date' class+='form-control' %}
        </div>

        <label for="{{form.last_billing.id_for_label }}">ggf. Enddatum des letzten Vergütungszeitraums</label>
        <div class="input-group mb-4">
            <span class="input-group-text">
                <i class="bi bi-person-fill"></i>
            </span>
            {% render_field form.last_billing type='date' class+='form-control' %}
        </div>

        <label for="{{form.billing_end.id_for_label }}">ggf. Enddatum der Betreuung</label>
        <div class="input-group mb-4">
            <span class="input-group-text">
                <i class="bi bi-person-fill"></i>
            </span>
            {% render_field form.billing_end type='date' class+='form-control' %}
        </div>


        <div class="form-check form-switch">
            {% render_field form.dutyscope_financial class+='form-check-input' type='checkbox' role='switch' id='checkbox-dutyscope-financial' %}
            <label for="checkbox-dutyscope-financial" class="form-check-label">Aufgabenkreis Vermögenssorge ist vorhanden (Für die Formulierung des Anschreibens)</label>
        </div>

        <div class="form-check form-switch">
            {% render_field form.taken_from_volunteer class+='form-check-input' type='checkbox' role='switch' id='checkbox-taken-from-volunteer' %}
            <label for="checkbox-taken-from-volunteer" class="form-check-label">Die Betreuung wurde von einem ehrenamtlichen Betreuer übernommen. (Zur Geltendmachung der gesonderten Pauschale nach §10 (2) VBVG bei der ersten Abrechnung)</label>
        </div>

        <div class="form-check form-switch">
            {% render_field form.given_to_volunteer class+='form-check-input' type='checkbox'role='switch' id='checkbox-given-to-volunteer' %}
            <label for="checkbox-given-to-volunteer" class="form-check-label">Die Betreuung wurde an einen ehrenamtlichen Betreuer abgegeben. (Zur Geltendmachung der gesonderten Pauschale nach §10 (3) VBVG bei Abgabe der Betreuung)</label>
        </div>

        <button type="submit" class="btn btn-success mt-3">Los gehts</button>
    </form>
</div>

{% endblock %}

但是当我调用 edit_Patent 时,我取回了模板,但没有填写生日和其他日期。所有其他字段都使用存储的信息进行渲染。

日期有什么问题吗?

我已经在 django 论坛上提出了问题,并得到了尝试不使用 widget_tweaks 的表单的提示。如果我使用 {{ form.as_p }} 渲染它,则会填充日期字段。 那么...我如何让它与 widget_tweaks 一起使用?

django django-templates django-widget-tweaks
1个回答
0
投票

好吧,经过多次尝试和错误我想通了:

在我的

settings.py
中,我有
LANGUAGE_CODE = 'de-de'

发送表单时,根据设置的区域设置以 dd.mm.yyyy 格式传输数据。这是页面输入栏的传输源:

<input type="date" name="birthday" value="10.04.2004" class="form-control" required="" id="id_birthday">

似乎 django 或 widget_tweaks 与这里的语言环境不太兼容。根据 W3 Schools 的说法,HTML 日期输入始终需要 yyyy-mm-dd 格式的值,并且只有在此之后浏览器才会根据其区域设置呈现日期。

我将

settings.py
中的区域设置更改回
LANGUAGE_CODE = 'en-us'
现在一切正常:

<input type="date" name="birthday" value="2004-04-10" class="form-control" required="" id="id_birthday">

而且表单渲染得很好。

© www.soinside.com 2019 - 2024. All rights reserved.