modal不加载表单数据

问题描述 投票:0回答:1

我有数据表单和数据更新视图,当我不使用模态时,它工作得很好,但是当使用模态时,它会加载空表单,如果我加载没有模态,则保存在数据库中的数据出现。我不知道我哪里出错了。我可以更改用户名并保存,问题是让我们说user1和我想更改为user2名称,当我单击更改名称时,表单字段不会随user1填写。如果我不填写使用模态,它已经填入了user1

views.朋友

class UserNameUpdate(LoginRequiredMixin, UpdateView):
    model= User 
    fields = ['username']
    template_name=' /change-username.html'

    def get_object(self, queryset=None):
        if queryset is None:
            queryset = self.get_queryset()   # This should help to get current user 

        # Next, try looking up by primary key of Usario model.
        queryset = queryset.filter(pk=self.request.user.usuario.pk)


        try:
            # Get the single item from the filtered queryset
            obj = queryset.get()
        except queryset.model.DoesNotExist:
            raise Http404("No user matching this query")
        return obj


    def get_success_url(self):
        return reverse('sistema_perfil')

变化username.html

{% load static %}
{% load bootstrap %}
{% load widget_tweaks %}
{% load crispy_forms_tags %}
{% block main %}
<div class="container">
<div class="card text-white bg-primary mb-3">
        <div class="card-header"><small class="text">
          <a href="{% url 'sistema_index' %}" class="text-white ">Home /</a>  
          <a href="{% url 'sistema_perfil' %}" class="text-white ">Perfil /</a>  
          <a  class="text-white">Usúario</a>
            </small></a></p> Alterar Nome do Usúario</div>
  <div class="card bg-light text-center ">
  <div class="card-body text-secondary text-center">



<form method="post" action="{% url 'sistema_change_username' %}" class="form-signin" enctype="multipart/form-data" id="form" name="form" validate>
{% csrf_token %}

<div class="form-row "> 


    <div class="form-group col-md-6 text-center">
        {{ form.username| as_crispy_field}}
      </div>
</div>

<input type="submit" class="btn btn-primary " >

</form>


<a class="btn btn-light float-left" href="sistema_perfil" role="button">Voltar</a>


</div>
</div>
</div>
</div>
{% endblock %}

menu_perfil.html

    <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
            Launch demo modal
        </button>

                    <!-- Modal -->
                    <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
                        <div class="modal-dialog" role="document">
                        <div class="modal-content">
                            <div class="modal-header">
                            <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                <span aria-hidden="true">&times;</span>
                            </button>
                            </div>
                            <div class="modal-body">

    {% include 'profile/change-username.html' %}
                            </div>
                            <div class="modal-footer">

                            </div>
                        </div>
                        </div>
                    </div>
javascript ajax django bootstrap-modal ajaxform
1个回答
0
投票

我是对的,有两种不同的视图加载了模态和非模态模板吗?如果是这样,问题是你如何使用Django的{% include %}模板标签。以下是文档:

https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#include

关键线:“包含的模板在包含它的模板的上下文中呈现。”

看起来menu_perfil.html是从不同的视图渲染的,它不会将表单对象传递到其上下文中。所以menu_perfil.html不知道{{ form }}是什么。而change-username.html使用您的UsernameUpdate视图和表单对象进行渲染。尝试将模式HTML移动到您的表单代码周围的change-username.html,而不是包含一个单独的代码段,看看是否能解决问题。

一般来说,使用{% extends %}继承基本模板比使用includes更好,除非你真的必须这样做,因为这样的限制。

© www.soinside.com 2019 - 2024. All rights reserved.