我正在构建一个 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 一起使用?
好吧,经过多次尝试和错误我想通了:
在我的
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">
而且表单渲染得很好。