Django从URL在表单中预填充数据
因此,在我的detailView页面上有一个按钮,用于显示我的模型“patient”,并将您带到另一个模型“约会”的createView。我想要的是根据我来自哪个detailView预先填充约会的外键字段。以下是我目前的代码: URL.py:Django从URL在表单中预填充数据,django,django-models,django-forms,django-views,Django,Django Models,Django Forms,Django Views,因此,在我的detailView页面上有一个按钮,用于显示我的模型“patient”,并将您带到另一个模型“约会”的createView。我想要的是根据我来自哪个detailView预先填充约会的外键字段。以下是我目前的代码: URL.py: # /patients/appointment/add url(r'appointment/add/$', views.appointmentCreate.as_view(), name='appointment-create'), models.py:
# /patients/appointment/add
url(r'appointment/add/$', views.appointmentCreate.as_view(), name='appointment-create'),
models.py:
class patient(models.Model):
TITLE_CHOICES = (
('Mr', 'Mr'),
('Mrs', 'Mrs'),
('Ms', 'Ms'),
('Miss', 'Miss'),
)
Title = models.CharField(max_length=100, blank=True, choices=TITLE_CHOICES)
First_Name = models.CharField(max_length=250, default='')
Surname = models.CharField(max_length=250, default='')
DOB = models.DateField()
class appointment(models.Model):
Patient = models.ForeignKey(patient, on_delete=models.CASCADE)
views.py:
class appointmentCreate(LoginRequiredMixin, CreateView):
model = appointment
fields = ['Patient', 'Date', 'Time', 'Duration', 'Location', 'Clinician', 'AppointmentType']
form-template.html:
<body>
{% for field in form %}
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<span class="text-danger small">{{ field.errors }}</span>
</div>
<label class="control-label col-sm-2">{{ field.label_tag }}</label>
<div class="col-sm-10">{{ field }}</div>
</div>
{% endfor %}
</body>
如何实现此代码?首先创建一个模型表单:
from django import forms
from your_app.models import appointment
class AppointmentForm(forms.ModelForm):
class Meta:
model = appointment
fields = ['Patient', 'Date', 'Time', 'Duration', 'Location', 'Clinician', 'AppointmentType']
然后在CreateView中传递模型表单:
class appointmentCreate(LoginRequiredMixin, CreateView):
model = appointment
form_class = AppointmentForm
def get_initial(self):
patient = self.request.GET.get('patient')
return {
'patient': patient,
}
您的患者选择字段将根据请求获取参数填充,感谢您的回复。我真的不懂代码。你能再进一步解释一下吗,因为我是django的新手。(评论会很好)是有意义的,但是,在形式上,我应该如何设置值?我将更新我的问题,以显示templatesDjango有许多钩子可以在表单中传递request get参数。你必须决定哪一个更适合你的实现。我做了一些编辑。病人的p应该是大写的,我必须加上一些字。
def get_context_data(self, **kwargs):
context = super(appointmentCreate, self).get_context_data(**kwargs)
context['patient_id'] = self.request.GET.get('patient')
return context
from django import forms
from your_app.models import appointment
class AppointmentForm(forms.ModelForm):
class Meta:
model = appointment
fields = ['Patient', 'Date', 'Time', 'Duration', 'Location', 'Clinician', 'AppointmentType']
class appointmentCreate(LoginRequiredMixin, CreateView):
model = appointment
form_class = AppointmentForm
def get_initial(self):
patient = self.request.GET.get('patient')
return {
'patient': patient,
}