Django ModelForm未在temp中呈现

2024-04-24 18:08:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这里看了几个答案,但我不能让它发挥作用。我正在尝试创建一个模型表单,将保存用户的配置文件后,他已在网站上注册。问题是,当我试图呈现表单时,我得到的是一个空白页面,没有错误。任何帮助都将不胜感激。在

在模型.py在

class Perfil(models.Model):
    user = models.OneToOneField(User)
    Sexo = models.CharField(max_length=100)
    Direccion = models.CharField(max_length=100)
    CP = models.CharField(max_length=100)
    Ciudad = models.CharField(max_length=100)
    Estado = models.CharField(max_length=100)
    Pais = models.CharField(max_length=100)
    Telefono = models.CharField(max_length=100)
    Celular = models.CharField(max_length=100)
    PaisPasaporte = models.CharField(max_length=100)
    NumeroPasaporte = models.CharField(max_length=100)
    VigenciaPasaporte = models.DateField(max_length=100)
    ContactoEmergencia = models.CharField(max_length=100)
    TelefonoEmergencia = models.CharField(max_length=100)
    CorreoEmergencia = models.CharField(max_length=100)
    Alergias = models.CharField(max_length=500)

在表单.py在

^{pr2}$

在视图.py在

@verified_email_required()
def profile(request):
    if request.method == "POST":
        form = ProfileForm(request.POST)
        if form.is_valid():
            perfil = form.save(commit=False)
            perfil.user = request.user
            perfil.save()
            return HttpResponseRedirect("/profile/")
        else:
            return render(request, "explore/profile.html", {"form": form})
    return render(request, "explore/profile.html")

最后是我的html

<form class="profile" id="profile_form" method="post" action="" style="width: 50%;">
                {% csrf_token %}
                {% for field in form %}
                    <table>
                    <colgroup>
                        <col style="width: 45%;">
                        <col style="width: 10%;">
                        <col style="width: 45%;">
                    </colgroup>
                    <tr>
                        <td>{{ field.label_tag }}</td>
                        <td></td>
                        <td>{{ field }}</td>
                    </tr>
                    </table>
                {% endfor %}
            </form>

谢谢!在


Tags: pyform表单returnstylemodelsrequestprofile
1条回答
网友
1楼 · 发布于 2024-04-24 18:08:43

当请求类型为POST时,您只在上下文中发送表单。第一次加载页面时,默认情况下是一个GET请求。所以这个问题

这样的方法应该有效:

def profile(request):
    form = ProfileForm()
    if request.method == "POST":
        form = ProfileForm(request.POST)
        if form.is_valid():
            perfil = form.save(commit=False)
            perfil.user = request.user
            perfil.save()
            return HttpResponseRedirect("/profile/")

    return render(request, "explore/profile.html" {'form': form})

请注意,您根本不需要else子句—如果表单无效,它会自动在上下文中发送错误的表单,并且您的错误消息会显示得很好。在

相关问题 更多 >