【问题标题】:I can't get the selected student in widget tweaks render_field using CreateView我无法使用 CreateView 在小部件调整 render_field 中获取选定的学生
【发布时间】:2018-11-12 12:03:30
【问题描述】:

我在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

【问题讨论】:

    标签: django forms django-widget-tweaks


    【解决方案1】:

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

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

    【讨论】:

    • 我试过了(你可以在下面看到)但什么也没发生... :(
    【解决方案2】:

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

    谢谢!

    【讨论】:

      猜你喜欢
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 2021-09-16
      • 2013-05-21
      • 1970-01-01
      相关资源
      最近更新 更多