少し作業すれば、純粋な Python でこれを実行できるはずです。基本的にget_changelist_form
、管理クラスのメソッドを使用して、インスタンスのデフォルトではなくカスタム フォームを使用するように指示しModelForm
、カスタム フィールドの値を適切に初期化し (フォームのメソッドで最も便利です)、そのフォームの動作を__init__
特殊化する必要があります。との値save
を設定します。first_name
last_name
このようなものから始める必要があります。
class PersonChangeListForm(forms.ModelForm):
class Meta:
model = Person
name = forms.CharField()
def __init__(self, *args, **kwargs):
instance = kwargs.get('instance')
if instance:
initial = kwargs.get('initial', {})
initial['name'] = '%s %s' % (instance.first_name, instance.last_name)
kwargs['initial'] = initial
super(PersonChangeListForm, self).__init__(*args, **kwargs)
def save(self, *args, **kwargs):
# use whatever parsing you like here
first_name, last_name = self.cleaned_data['name'].split(None, 1)
self.cleaned_data['first_name'] = first_name
self.cleaned_data['last_name'] = last_name
return super(PersonChangeListForm, self).save(*args, **kwargs)
class PersonAdmin(admin.ModelAdmin):
def get_changelist_form(self, request, **kwargs):
return PersonChangeListForm
また、ブール値としてテストされたときにlist_editable
と評価される値を宣言する必要があります。True
list_editable
True
編集可能にしたいフィールドが他にない場合、これはさらに複雑になります。クラスの検証では、シーケンス内のすべてが、同様にlist_editable
宣言されている編集可能なフィールドである必要があり、表示リンク フィールドではありません。管理クラスのメソッドをオーバーライドして、真でない場合でも完全な処理を使用するか、空の場合でも評価されるorのカスタムサブクラスを定義して、検証に合格できるようにlist_display
するオプションがあると思います。前者は大量の標準コードを繰り返す必要があり、アップグレードした場合にメンテナンスの負担が大幅に増加しますが、後者は直観に反するハックであり、予期しない結果が生じたとしても私はまったく驚かないでしょう.changelist_view
list_editable
list
tuple
True
どちらも良い選択肢ではないので、 に含める意味のある他のフィールドが少なくとも 1 つあることを願っていますlist_editable
。