17

初心者のDjangoの質問:Django管理者に、複数選択ウィジェットでより多くの選択肢の行を表示してもらいたいのですが。選択できるリストが非常に長いので、特にスクロールする場合、デフォルトの4行は便利ではありません。

現在、そのウィジェットは複数選択としてレンダリングされていますが、複数選択=="12"にしたいと思います。理想的にはこれは特定のフィールド用である必要がありますが、同じサイズの属性でレンダリングされたすべてのフィールドで生きることができます。

では、それを変更するのにDjangoの最適な場所はどこでしょうか?

4

4 に答える 4

22

これは、admin.pyで、すべてのManyToManyFieldアイテムにブランケットサイズを設定することで行いました。次に例を示します。

from django.contrib import admin
from django.forms import SelectMultiple
from django.db import models
from models import *

class RiverAdmin(admin.ModelAdmin):
    formfield_overrides = { models.ManyToManyField: {'widget': SelectMultiple(attrs={'size':'10'})}, }

admin.site.register(River, RiverAdmin)
于 2012-09-27T03:45:51.327 に答える
16

拡大し続ける長い選択がある場合は、オートコンプリート ウィジェットを使用することをお勧めします。

とにかく、次のことができます。

  1. 問題のモデルの ModelForm を作成します

  2. 問題のフィールドのデフォルトのウィジェットをオーバーライドし、

  3. 必要に応じてウィジェットのサイズ属性を設定します

  4. たとえば、 ModelAdmin でそのフォームを有効にします。

    class YourModelForm(forms.ModelForm):
        class Meta:
            model = YourModel
            widgets = {
                'your_field': forms.SelectMultiple(attrs={'size': 12})
            }
    
    
    class YourModelAdmin(admin.ModelAdmin):
        form = YourModelForm
    
于 2012-09-11T08:41:13.560 に答える
2

formfield_for_manytomany をオーバーライドして size 属性を設定する方法があります。

def formfield_for_manytomany(self, db_field, request, **kwargs):
        form_field = super().formfield_for_manytomany(db_field, request, **kwargs)
        if db_field.name in [*self.filter_horizontal]:
            form_field.widget.attrs={'size': '10'}
        return form_field

于 2020-08-12T05:12:56.170 に答える