我无法使用CreateView

时间:2018-11-12 12:03:31

标签: django forms django-widget-tweaks

我在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。我该如何解决学生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

2 个答案:

答案 0 :(得分:0)

覆盖get_initial()的{​​{1}}方法以设置模型的初始值:

CreateView

答案 1 :(得分:0)

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

谢谢!