Django从URL在表单中预填充数据

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:

因此,在我的detailView页面上有一个按钮,用于显示我的模型“patient”,并将您带到另一个模型“约会”的createView。我想要的是根据我来自哪个detailView预先填充约会的外键字段。以下是我目前的代码:

URL.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,
      }