これを行うには、私が知っている最良の方法は、フォームまたはでinitial
辞書を渡すことで、テンプレートにフォームを渡す前に、フィールドを初期化することですinstance
オブジェクトをフォームに渡します。
フィールドが無効になっていることを確認するか、フィールドを非表示にしてフィールドを通常のテキストとして表示する必要があります。
最も重要なことは、クライアントにデータを渡してフォームに戻す場合、データが入って来るのと同じであることを確認する必要があります(セキュリティのため)。フォームのclean_[field]
機能でこれを行います。次のようになります。
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
def clean_date_created(self):
if self.cleaned_fields['date_created'] != self.instance.date_created:
raise ValidationError, 'date_created has been tampered'
self.cleaned_fields['date_created']
[編集/追記】あるいは、あなたが個別にレンダリングするテンプレートに直接データを渡すことができ、そして、あなたのビューに戻ってそれを取得した後、あなたのフォームにデータにタック。これは次のようになります:
def recieve_form(request, ...):
...
f = MyForm(request.POST, instance=a)
new_model_instance = f.save(commit=False)
new_model_instance.date_created = <whatever>
new_model_instance.save()
どのようにフォームを作成していますか?モデルフォームのショートカットがあるかどうかはわかりませんが、Claudeの答えは私が知っている方法を示し、フォームクラスにMetaオブジェクトを設定しています。 – forivall
私はModelFormとFormを使用しています。私は今日の両方の提案を考慮に入れて、私が思いつくことができるものを見ていきます。 – andermic