0

我有两个模型:

ProcessDao
  ** normal fields **
  resource = models.ForeignKey(ResourceData, related_name='processes')

ResourceData
  ** Normal Fields **

下面的代码在我的 views.py 中:

pdForm = ProcessDataForm(request.POST)
rd = ResourceData.objects.get(pick_date__exact = request.POST['pick_date'])
pdForm.resource = rd    <------ here is the assignment
if pdForm.is_valid():
  pdForm.save()
else:
  print 'pdForm is not valid ! ', pdForm.errors
  # print "resource is not valid."

有什么方法可以使 pdForm 有效吗?

4

2 回答 2

1

您不应该使用已清理的表单来分配空字段吗?尝试类似:

if pdForm.is_valid():
    cleanform = pdForm.save(commit = False).
    cleanform.resource = rd
    cleanform.save()

我只是不确定它是否可以与资源作为模型中的唯一字段一起使用。我是 django noob,但它适用于我以多种形式分配 ForeignKey 字段。

于 2012-02-24T05:57:56.117 回答
1

为什么您认为将随机属性分配给表单对象会使其有效?表单没有任何时候使用其实例属性来检查其有效性,并且文档中没有任何内容暗示它会这样做。

有几种方法可以正确解决此问题。首先,也可能是最丑陋的,是将request.POST匹配对象的 id 复制并插入其中。(您需要复制它,因为原始实例是不可变的)。

更好的方法是从表单中完全排除该字段(通过表单的Meta类)并在is_valid子句中执行以下操作:

object = pdForm.save(commit=False)
rd = ResourceData.objects.get(pick_date__exact = pdForm.cleaned_data['pick_date'])
object.resource = rd  
object.save()
于 2012-02-24T10:25:18.290 回答