私はDjangoのフォームを使用してAPI PATCH要求を検証しています。 "ビュー"(実際に直接ビューではないので引用符で囲みますが、これは落ち着きのないResource
ですが、ここでは無関係です)、このパッチ要求を処理するself.data
には、 License
オブジェクトのフィールド。変更するオブジェクトのインスタンスにModelForm
をインスタンス化したいと思います。明らかに、しかし、私はこれがどう機能するのか誤解しています。下記を参照してください:私は上記の機能にデータとしていくつかのフィールドを渡すと、form.errors
はModelForm
作品でインスタンスを設定する方法を、私ははっきりと理解していないよという意味、License
モデルのほぼすべての他の必要なフィールドを文句Django ModelForm 'instance' paramが期待通りに動作しない
def handle_patch(self, pk):
license = License.objects.get(id=pk)
form = LicenseResourceForm(self.data, instance=license)
if not form.is_valid():
print(form.errors)
。
私はclean()
方法でDjangoのModelForm
コード自体にいくつかのデバッグプリントを追加し、それが洗浄工程を行うことを始めると、私はself.instance
が私を混乱させる、私は期待しLicense
のインスタンス、移入されていることがわかります - ModelForm
オブジェクトはインスタンスを認識していますが、それを「空白を埋める」ために使用していません。
私は何を誤解していますか?私はこれを間違っていなければならない。
EDIT私はここに、それは私のデバッグ出力を含む、である、あなたのいくつかはLicenseResourceForm
そのものを見てみたいことを実現:
class LicenseResourceForm(ModelForm):
"""Form for License Resource create and change endpoints."""
class Meta(object):
model = License
fields = ['customer', 'service', 'enabled', 'not_valid_before', 'not_valid_after']
def clean(self):
try:
print(self.instance)
super().clean()
except Exception as e:
print(e)
HTMLフォームのコンテキストで考えてみましょう。また、部分フォームを送信しないという事実は理にかなっています。フィールドの動的設定に関する良いアイデア。私はそれと一緒に遊ぶよ。ありがとうございました! – fildred13