【问题标题】:Why is my Django form not "valid"? Can't get the POST request to update database为什么我的 Django 表单不是“有效”的?无法获取更新数据库的 POST 请求
【发布时间】:2021-02-17 12:29:06
【问题描述】:

我正在尝试为我的 Django 应用程序中的用户创建用户配置文件。我的表单显示了我想要的位置,当我尝试提交时,什么也没有发生。 我在 view.py 中的 form.is_valid 后面放了一条打印语句,发现它不是“有效的”,但我不知道为什么。 我尝试了几种不同的方法来“清理”/“验证”数据,但我无法通过“无效”的表单。

任何帮助将不胜感激!

网址:

path('userinfo/', views.user_info, name='userinfo')

表单模板:

{% extends "base.html" %}

{% load bootstrap4 %}

{% block content %}
<div class="container">
  <h1>Enter User Info</h1>
<form method="POST" class="form">
 {% csrf_token %}
 {% bootstrap_form form %}

 <input type="submit" class="btn btn-primary" value="Create Profile">

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

查看:

def user_info(request):

form = ProfileForm()

if request.method == 'POST':
    form = ProfileForm(request.POST)
    if form.is_valid():
        form.save()
    else:
        form = ProfileForm()

return render(request, 'miraDashboard/form.html', context={'form': form})

型号:

from django.db import models
from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE)
    name = models.CharField("Full Name", max_length=1024)
    job_role = models.CharField("Role", max_length=254, default="Seeking Job Opportunities")
    zip_code = models.CharField("Zip Code", max_length=5)
    user_image = models.ImageField("Upload Profile Picture", upload_to='images/')
def __str__(self):
    return f'{self.user.username} Profile'

表格:

from django.forms import ModelForm
from .models import Profile

class ProfileForm(ModelForm):

class Meta:
    model = Profile
    fields = ['name','job_role','zip_code', 'user_image']

【问题讨论】:

  • 你可以尝试用 ?
  • 我试过了,但没有任何改变。
  • 尝试添加 "enctype="multipart/form-data" 到表单中:

标签: python django django-models django-views django-forms


【解决方案1】:

如果您想查看表单更改中的错误 else statmant:

def user_info(request):

form = ProfileForm()

if request.method == 'POST':
    form = ProfileForm(request.POST)
    if form.is_valid():
        form.save()
    else:
        print(form.errors.as_data()) # here you print errors to terminal


return render(request, 'miraDashboard/form.html', context={'form': form})

在 form.is_valid() 之后,您不需要再次设置它(else 语句中的 form = ProfileForm())。这样你的表单就会出错(你可以在 form.errors 中看到它们)。

【讨论】:

  • 我试过这个并得到:{'user_image': [ValidationError(['This field is required.'])]}...这有助于缩小我需要查看的内容!会试着弄清楚为什么会这样。非常感谢!
  • 如果您不想上传 img,只需将模型字段 user_image 更改为:models.ImageField("Upload Profile Picture", upload_to='images/', blank=True, null=True)
  • 我需要配置文件的图像。我认为当我点击创建配置文件时,我的 form.html 文件需要调整以知道将图像发送到哪里。还在想办法。
猜你喜欢
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多