我无法使用 CreateView 在小部件调整 render_field 中获取选定的学生

I can't get the selected student in widget tweaks render_field using CreateView

我在 views.py 中使用以下代码:

        class MatriculaCreateView(CreateView):
            template_name = "website/matricula.html"
            model = CursoPeriodoEstudante
            form_class = MatriculaMembroForm
            success_url = reverse_lazy("website:lista_estudantes")

            def get_context_data(self, **kwargs):
                context = super(MatriculaCreateView, self).get_context_data(**kwargs)
                context['estudante'] = Estudante.objetos.filter(id=self.kwargs['pk'])
                context['pk'] = self.kwargs['pk']
                return context

我在 forms.py 中创建了以下内容:

        class MatriculaMembroForm(forms.ModelForm):

            class Meta:
                # Modelo base
                model = CursoPeriodoEstudante

                # Campos que estarão no form
                fields = [
                    'estudante',
                    'cursoPeriodo'

                ]

最后在我创建此页面的模板中:

        {% extends "website/_layouts/base.html" %}

            {% load widget_tweaks %}

            {% block title %}Matricula de Membros{% endblock %}

            {% block conteudo %}
            <div class="container mt-5">
              <div class="row">
                <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
                  <div class="card">
                    <div class="card-body">
                      <h5 class="card-title">Matrícula de Membros</h5>
                      <p class="card-text">
                        Complete o formulário abaixo para matricular
                        um <code>Membro</code> em um evento.
                      </p>
                      <p>Membro: {{ estudante }} </p>
                      <form method="post">
                        <!-- Não se esqueça dessa tag -->
                        {% csrf_token %}

                        <!-- Estudante -->
                        <div class="input-group mb-3">
                          <div class="input-group-prepend">
                            <span class="input-group-text">Estudante</span>
                          </div>
                          {% render_field form.estudante class+="form-control" %}
                        </div>
                        <hr>
                        <!-- Curso -->
                        <div class="input-group mb-3">
                          <div class="input-group-prepend">
                            <span class="input-group-text">Evento</span>
                          </div>
                          {% render_field form.cursoPeriodo class+="form-control" %}
                        </div>
                        <hr>
                        <div class="text-right">
                          <a href="{% url 'website:lista_estudantes' %}" class="btn btn-outline-primary">Voltar</a>
                          <button class="btn btn-primary">Enviar</button>
                        </div>
                      </form>
                  </div>
                </div>
              </div>
            </div>
            {% endblock %}

问题是,当页面打开时,我希望字段 "Estudante" 已经填充了我通过 get_context_data 在视图中选择的字段(此字段可以修复)。但是字段总是这样来的:printscreen from page. How can I fix to come with the student like this。我能做什么?谢谢!

Ps.: 我尝试输入以下内容,但没有任何反应...

            class MatriculaCreateView(CreateView):
                                template_name = "website/matricula.html"
                                model = CursoPeriodoEstudante
                                form_class = MatriculaMembroForm
                                success_url = reverse_lazy("website:lista_estudantes")

                                def get_initial(self):
                                    return {'estudante': Estudante.objetos.filter(id=self.kwargs['pk'])}

                                def get_context_data(self, **kwargs):
                                    context = super(MatriculaCreateView, self).get_context_data(**kwargs)
                                    context['estudante'] = Estudante.objetos.filter(id=self.kwargs['pk'])
                                    context['pk'] = self.kwargs['pk']
                                    return context

覆盖 CreateViewget_initial() 方法以设置模型的初始值:

def get_initial(self):
    return {'estudante': Estudante.objects.get(id=self.kwargs['pk'])}

我明白了! 我应该更改视图以获取,而不是过滤器(查询)。

谢谢!