如何在Django上的UpdateView中显示表单?

时间:2017-11-06 10:59:21

标签: django django-models django-forms django-templates

我想制作更改模型信息用户的更新页面。 我的节目很棒。

#urls.py

url(r'^user_edit/(?P<pk>\d+)$', views.UserEdit.as_view(), name='user_edit'),



#models.py

from datetime import datetime
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User    

class User(User):
    name = models.CharField(max_length=200, default='Null')
    post = models.CharField(max_length=9, default='Null')
    bank = models.CharField(max_length=200, default='Null')
    mail = models.CharField(max_length=200, default='Null')
    address1 = models.CharField(max_length=200, default='Null')
    address2 = models.CharField(max_length=200, default='Null')
    address3 = models.CharField(max_length=200, default='Null')
    tel = models.CharField(max_length=15, default='Null')
    fax = models.CharField(max_length=15, default='Null')


#views.py
from .forms import InvoiceForm, UserForm, CustomerForm ,UserSignupForm
class UserEdit(generic.UpdateView):
    model = User
    form_class = UserForm
    template_name = 'invo/user.html'
    success_url = "invo/user_info"

    # get current user object
    def get_object(self, queryset=None):
        return self.request.user

#forms.py

from django import forms
from .models import Invoice, User, Customer

class UserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ["username", "email",'password','first_name', 'last_name', ]

#user.html [Template]

{% extends 'invo/base.html' %}

{% block content %}


<div class="gtco-section gtco-testimonial gtco-gray">
    <div class="gtco-container">
        <div class="row">
            <div class="col-md-8 col-md-offset-2 gtco-heading text-center">
                <h2>Update</h2>
            </div>
        </div>
        <div class="row">
            <h3>User Profile</h3>
            <div class="row">
                {% if messages %}
                <ul class="messages">
                    {% for message in messages %}
                    <li
                    {% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
                    {% endfor %}
                </ul>
                {% endif %}
                <form method="post">
                    {% csrf_token %}
                    <table>
                        {{ form.as_p }}
                    </table>
                    <input type="submit" value="change">
                </form>


            </div>


        </div>
    </div>
</div>
<!-- END .gtco-services -->


{% endblock%}

我的页面是这样的。它没有表格 enter image description here 这是html源代码。有Form.But它是隐藏的!!有什么问题?没有获得表格信息......?

#source

    <h3>User Profile</h3>
            <div class="row">

                <form method="post">
                    <input type='hidden' name='csrfmiddlewaretoken' value='pLoy7OtBOunF70avjFRTt1wlaIwTIArfe8wkNmbVZOslAu6G4hiFoC8oRWVhcbID' />
                    <table>

                    </table>
                    <input type="submit" value="change">
                </form>
            </div>

我以同样的方式制作了另一个更新表单。但是用户模型无法显示表单。 如果你知道这个问题。请帮助我。

3 个答案:

答案 0 :(得分:0)

使用基于类的视图,您可以只指定要使用的模型上的字段,并且只要视图可以确定视图所针对的模型,就会生成ModelForm。见https://docs.djangoproject.com/en/1.11/topics/class-based-views/generic-editing/#model-forms

然后你的观点看起来像:

class UserEdit(generic.UpdateView):
    model = User
    fields = ('username', )

答案 1 :(得分:0)

我认为它可能是您的模型字段,您继承了User模型并尝试更改其字段,继承AbstractUser类会更安全。这可能是原因。如果您不知道如何使用AbstractUser类,可以查看本教程。 https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html,我真的希望这会有所帮助。

答案 2 :(得分:0)

您已将form_class定义为用户编辑表单,但您正在使用{{form.as_p}}作为模板中的表单首先更正