【问题标题】:Django forms "not" using forms from modelsDjango表单“不”使用模型中的表单
【发布时间】:2010-05-30 21:44:28
【问题描述】:

我有一个从各种模型生成的表格,填充的各种值放在其他表格中。因此,在这种情况下,我没有使用内置的 Django forms即我没有从模型创建表单)。

现在从自制表单发布的数据由view1 处理,它应该相应地清理数据。我该如何去做并使用各种功能clean 并定义validation errors(最好不要在视图本身中执行验证逻辑!)

编辑
我定义了 3 个模型 ==> 3 个数据库表。现在要创建一个表格,显示来自 2 个模型的数据,然后将来自该表格的数据保存在第三个表中!在这种情况下,我自己创建了表单,我想使用表单功能来验证这个自制表单的输入。我应该怎么做?万一我不能使用内置的表单功能,我在哪里以及如何验证这个自制表单(不使用模型中的表单)

【问题讨论】:

  • 你能说得更具体点吗?您说您不使用表单,但您谈论的是清理和验证错误,它们是表单功能。
  • 您可以在没有任何模型的情况下使用 django 表单,如果我理解正确,您是在询问如何验证视图中的 POST 数据。
  • 在问题本身中查看上面的编辑。 @rebus - 是的,在这些方面有一些东西,但是我该如何去做并处理它的验证?

标签: django django-models django-forms


【解决方案1】:

我仍然不确定为什么你不能使用内置的表单验证方法。

假设模型:

class A(models.Model):
   a = models.CharField()

class B(models.Model):
   b = models.CharField()

class C(models.Model):
   c = models.CharField()
   d = models.CharField()

假设来自A.aB.b 的值需要通过表单以C.cC.d 模型结束:

class MyForm(forms.Form):
   a = forms.CharField()
   b = forms.CharField()

当您填充并提交表单时,对其进行标准验证:

if request.method == "POST": 
   form = MyForm(request.POST)
   if form.is_valid():
      model3 = C() # create 3rd model objects
      model3.c = form.cleand_data['a'] # and assign values from form to it
      model3.d = form.cleand_data['b']
      model3.save() # save the data into the 3rd table

或者您可以使用model validation 代替表单验证,但原理大致相同。

或者我仍然没有正确阅读您的问题?示例代码总是受欢迎的。

【讨论】:

    【解决方案2】:

    视图应该与表单进行的唯一交互是控制何时验证数据,以及如果数据有效或无效该怎么办,例如,

    if form.is_valid():
        do_something()
    

    否则一切都应该在表单类中完成,使用 clean_fieldname() 和 clean() 方法。请参阅http://docs.djangoproject.com/en/dev/ref/forms/validation/ 了解有关如何在表单中定义这些内容的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      相关资源
      最近更新 更多