0

私は2つのモデルを持っています:

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 に答える