【问题标题】:How to insert data with create in Django如何在 Django 中使用 create 插入数据
【发布时间】:2021-05-07 03:30:12
【问题描述】:

如何在 Django 中使用 create 插入数据

谢谢

型号

class Cliente(models.Model):

    seguimento          = models.PositiveIntegerField()

表格

class ClienteForm(forms.Form):

    seguimento = forms.IntegerField()

    def create(self, validated_data):

        client = Cliente.objects.create(**validated_data)

查看

form = ClienteForm(request.POST)
        if form.is_valid():
            form.create(validated_data=request.POST)

错误:

TypeError: int() 参数必须是字符串、类似字节的对象或数字,而不是“列表”

/admin/cliente 的类型错误 字段 'seguimento' 需要一个数字,但得到 [3]。

【问题讨论】:

  • 你必须使用form.cleaned_data。它更安全。所以:form.create(form.cleaned_data)
  • 它的工作。谢谢。

标签: python python-3.x django django-models django-forms


【解决方案1】:

如果表单验证成功,您需要调用form.create(form.cleaned_data) 来保存表单。阅读更多form-cleaned_data

form = ClienteForm(request.POST)
if form.is_valid():
    # use form.cleaned_data instead of request.POST
    form.create(form.cleaned_data) 

【讨论】:

  • 这适用于modelForm。但是,我没有使用它。我正在使用forms.Form。谢谢
  • 我明白了,您的表单似乎正在为 list[int] 验证,然后模型不接受它作为有效输入。
  • @marcelo.delta 在 create 内部传递 form.data 应该可以工作。 request.POST 是一个类似于 dict 的对象,名为 QueryDict ,并接受来自 html 表单的输入作为列表。
  • form.create(validated_data=form.data) - 不起作用
  • @marcelo.delta 我认为表单上的属性名称是cleaned_data。我非常习惯使用 DRF 序列化程序。希望这行得通。
猜你喜欢
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-13
  • 1970-01-01
  • 1970-01-01
  • 2021-06-15
  • 2015-05-09
相关资源
最近更新 更多