【问题标题】:Can't get data from form in django template into view?无法从 django 模板中的表单获取数据?
【发布时间】:2020-05-19 14:00:14
【问题描述】:

目前,这两个打印语句要么记录“无”,要么根本不显示。即使我只是在 form.is_valid 条件下打印(“你好”),我也看不到它。不知道我做错了什么,但数据正在保存到 django 管理员中,但现在不是......

def create_user_account(request, *args, **kwargs):
    form = UserAccountForm(request.POST or None)
    print(request.POST.get('account_email'))

    if form.is_valid():
        print(form['account_email'].value())
        form.save()
        form = UserAccountForm()

    context = {
        'form': form
    }

    return render(request, 'registration/register_user.html', context)

和html:

    {% block content %}
       <form action="{% url 'home' %}" method='POST'> {% csrf_token %}
            {{form.as_p}}
            <input type='submit' value='Submit'/>
       </form>
    {% endblock  %}}

编辑:当我发送奇怪的请求时,我确实得到了“POST / HTTP/1.1”200。我没有看到预期的 201 或 302。

forms.py:

class UserAccountForm(forms.ModelForm):
    class Meta:
        model = UserAccount
        fields = [
            'first_name',
            'last_name',
            'account_email',
            'country'
        ]

class UserAccount(models.Model):
    first_name = models.CharField(max_length=30, null=False)
    last_name = models.CharField(max_length=30, null=False)
    account_email = models.EmailField(max_length = 254, null=False)
    country = models.CharField(choices=COUNTRY_CHOICES, null=False, 
    max_length=75)
    activated = models.BooleanField(default=False)

继续:

所以我删除了数据库,进行了迁移,并且该表看起来正常。我试图保存数据和同样的问题?但我也尝试通过管理站点手动添加信息并收到此错误: /admin/profiles/useraccount/add/ 处的 OperationalError 没有这样的表:main.auth_user__old

所以我更新到 Django 3.0.6,这解决了问题 - 现在可以手动添加,但仍然无法通过表单添加。

【问题讨论】:

  • 如果您在表单无效时添加 else 语句以打印某些内容 - 会出现吗?
  • 我希望这会奏效。它最初在页面呈现时出现,但是当我保存表单时,我得到&lt;WSGIRequest: POST '/'&gt; [19/May/2020 14:19:00] "POST / HTTP/1.1" 200 845
  • 您能发布您的 forms.py 文件吗?我曾经有一个表格,其中并非包含模型的所有必填字段
  • @Sven 添加 forms.py - 感谢您的帮助
  • if form.is_valid(): 之前尝试在终端中像这样输出错误:for field in form: for error in field.errors: print(error) 并查看终端中的表单有什么问题

标签: django


【解决方案1】:

这就是解决方案。我不知道它为什么停止工作,但确实如此。我觉得我被缩进巧妙了。

 def register(request):
    if request.method == 'POST':
        form = UserAccountForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/')
    else:
        form = UserAccountForm()

        context = {
            'form': form
        }

        return render(request, 'registration/register_user.html', context)

【讨论】:

  • 对于python,缩进很重要。正如您所写的那样,您的代码有效,我已经修复了缩进,以明确错误的缩进不是您的问题
  • 哦,谢谢。我真的不确定问题出在哪里,但我再次经历了这个过程,而我认为真的只是偏好的事情有所不同。我相信我会解决的,但很高兴它可以恢复工作!
猜你喜欢
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 2016-05-24
  • 2017-02-27
  • 2018-09-02
相关资源
最近更新 更多