私はdjango(1.8)に比較的慣れていないので、このリンクに従ってsave_formset関数をオーバーライドすることをすべて指摘しているこの問題を読みました。
古いスレッド ( Django admin - how to save inlines? ) に追加していましたが、可視性を高めるために別のスレッドとして上げたいと考えており、これ以外にも既に回答がありました。
以下の関数は、保存する前にフォームを修正しようとしている場所で機能します。つまり、監査フィールド (作成/変更) を USER に更新し、「enum_value_en」属性を小文字にします。ユーザーがエントリを 1 つだけ入力した場合はすべて機能しますが、さらに追加すると、すべてのエントリが同じ値 (つまり、データベースの「enum_value_en」) で更新されます。
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False) # gets instance from memory and add to it before saving it
for obj in formset.deleted_objects:
obj.delete()
for instance in instances:
for form in formset: # cleaned_data is only available on the form, so you have to iterate over formset
instance.modified_by = request.user
instance.created_by = request.user
instance.lowercase_enum_value_en = form.cleaned_data['enum_value_en'].lower()
instance.save()
formset.save_m2m()
元。
エントリが「a」と「b」の場合、両方のレコードで小文字の属性が「b」に設定されます。
PS。コードの各行を理解できるように、誰かが提案についてコメントを提供してくれるとありがたいです。
最も高く評価されています。