Keyword
というモデルとStatement
というモデルがあります。私は、ステートメントの追加や変更のためのフォームをカスタマイズしています。各Keyword
オブジェクトはStatement
オブジェクトとm2m(多対多)の関係を持ち、関連付けるキーワードをユーザーが選択できるようにしたいと考えました。多くのKeywordオブジェクトがあるので、m2mフィールドのデフォルトのウィジェットは私の場合は役に立たないので、それよりも優れたものが必要でした。私は必要な調整を得るためにFilteredSelectMultiple
ウィジェットを使用しました。djangoインラインでカスタム管理フォームに緑色のプラス記号を追加していますか?
ここにそのコードがあります。 forms.py
class StatementForm(forms.Modelform):
statement_keywords = forms.ModelMultipleChoiceField(
queryset=Keyword.objects.all(),
required=False,
widget=FilteredSelectMultiple(
verbose_name='Keywords Associated with Statement',
is_stacked=False
)
)
class Meta:
model = Statement
def __init__(self, *args, **kwargs):
super(StatementForm, self).__init__(*args, **kwargs)
if self.instance.pk:
self.fields['statement_keywords'].initial = self.instance.keyword_set.all()
def save(self, commit=True):
statement = super(StatementForm, self).save(commit=False)
if commit:
statement.save()
if statement.pk:
statement.keyword_set = self.cleaned_data['keyword']
self.save_m2m()
return statement
で
admin.py で
class KeywordInline(admin.TabularInline):
model = Keyword.statement.through
class StatementAdmin(admin.ModelAdmin):
list_display = ('statement_id', 'title', 'author', 'released_by', 'issue_date', 'access', 'full_text',)
list_filter = (StatementListFilter, 'released_by', 'issue_date', 'access',)
search_fields = ('statement_id', 'title', 'author', 'issue_date',)
inlines = [ KeywordInline,]
だから今、私は私が欲しかっただけのように、私のインラインのfilter_horizontalメニューを持っています。しかし、1つの問題があります:新しいキーワードを追加するプラス記号はありません。
これを解決するにはRelatedFieldWidgetWrapper
が必要であることがわかりました。私はこれを使用している人の例がたくさん見つかりました。しかし、私は自分の状況に合ったものを見つけることができませんでした。私が今直面している最も直面する問題は、「rel」パラメータに何かを挿入しようとすることです。 "rel"パラメータは、一般的に "関連する2つのモデルの関係"を定義しています。http://dashdrum.com/blog/2012/07/relatedfieldwidgetwrapper/
私はこの関係について何を示すべきか、それを示す方法はわかりません。インラインで作業しています。だから、私は実際には "キーワード"と呼ばれるフィールドで作業していません。Keyword
とStatement
の間のm2m関係を逆に調べています。だから関係を説明するために名前が何を意味するのか分かりません。
私が見つけたすべての例では、この状況で何をすべきかについて実際には話していませんでした。ほとんどの例は、モデルの1つから関心のあるフィールドを簡単に取得し、そのタイプまたは関係を取得しますが、インラインモデルと逆の関係では、必ずしもそうすることはできません。
あなたは 'extra'と' max_num'旅館あなたのインラインを設定しようとしましたか? –
はありませんでした。私はしばらくするだろうが...これらの特性はこの文脈で何をしているのだろうか? –
'extra'はデフォルトで表示される余分なインライン数を定義します。 'max_num'はインラインの数を制限します。したがって、もしあなたのデフォルト値 'max_num'がデフォルト値の' extra'より小さいなら、追加のインラインを追加することはできません。あなたの問題は、あなたのmodelFormが解決策ではないかもしれないからですが、試してみてください。私は、 –