django - ValueError - 无法创建消火栓,因为数据未验证

标签 django django-forms

我正在尝试使用 ModelForm 创建对象并将其保存到数据库中,但我不断收到 ValueError 消息,告诉我在提交 POST 数据后我的数据未经过验证。

这是在 models.py 中

class Hydrant(models.Model):
    gpscoord = models.OneToOneField(GPSCoord)
    address = models.OneToOneField(Address)
    size = models.DecimalField(max_digits=10, decimal_places=3)
    def __unicode__(self):
        return '(' + str(self.gpscoord.latitude) + ', ' + str(self.gpscoord.longitude) + ')'

class HydrantForm(ModelForm):
    class Meta:
        model = Hydrant

这是在views.py中

def hydrant_create(request): 
    if request.method == 'POST':
        form = HydrantForm(request.POST)
        new_hydrant = form.save() #it breaks here
        return HttpResponseRedirect(reverse('hydrant_detail', args=(new_hydrant.id,)))
    else:
        form = HydrantForm() #unbound form

    return render(request, 'structures/hydrant_create.html', {'form': form})

这是 Hydrant_create.html

<h3> Creating Hydrant</h3>
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}

<form action="{% url 'hydrant_create' %}" method="post">{% csrf_token %}

{{ form.as_p }}

<input type="submit" value="Submit" />
</form>

在“结构/消火栓/创建”中,我的 html 模板看起来不错(尽管我只能选择已经创建的 GPSCoord 和 Address 对象 - 有一个简单的解决办法吗?)。然而,一旦我在表单上输入数据并单击“提交”,我就会得到以下信息:

/structs/消防栓/create/处的ValueError

由于数据未验证,无法创建消火栓。

我通过 StackOverflow 进行了搜索,但其他人遇到的主要问题是将新对象的创建和现有对象的修改分开(我有两个 View 来处理这个问题,“编辑” View 遇到相同的情况)问题在同一个地方。

谢谢!

最佳答案

您需要在form.save()之前调用form.is_valid()。这将确保提交的表单包含您的模型所需的所有数据。如果表单验证失败,它将向用户显示错误所在。 Check out the documentation for further information.

def hydrant_create(request): 
    if request.method == 'POST':
        form = HydrantForm(request.POST)

        if form.is_valid():
            new_hydrant = form.save() #it breaks here
            return HttpResponseRedirect(reverse('hydrant_detail', args=(new_hydrant.id,)))
    else:
        form = HydrantForm() #unbound form

    return render(request, 'structures/hydrant_create.html', {'form': form})

关于django - ValueError - 无法创建消火栓,因为数据未验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17056087/

相关文章:

regex - Django-Rest-Framework动态url(动态前缀)

python - 如何在模型中设置元类中未定义的字段

python - 我遇到了有关 AttributeError 的问题

mysql - 构建 Docker mysql 数据库后抛出 OperationalError

python - Django formset - 如何为 modelformset 中的每个表单提供不同的查询集

django - Django 中的 LDAP 身份验证

Django Admin - 基于正在编辑的当前对象过滤选择字段

django - 验证空白 django 表单字段不起作用

Django ModelAdmin - 字段集...表单中缺少字段 'date'

django - 从表单集中删除无效表单