2012-03-20 16 views
15

私たちは外部キーとしてユーザーを持っているいくつかのモデルを持っています。しかし、私たちのシステムでは約25000人のユーザーが、必要なものを見つけるのは少し難しいです。Django admin:関連フィールドの選択されたボックスをオートコンプリートに変更します

選択ボックスよりも優れた解決策がありますか?ユーザー名/アドレスの入力を開始できるように、自動完成が必要なのでしょうか?または単に検索ボックスですか?これらのオブジェクトの関連ユーザーを切り替えると、未分類のユーザーが25000人になると難しくなります。

ユーザー名でユーザーを並べ替えるように設定するだけでも便利です。

+0

を参照してください。これは、高温になるようだ:https://github.com/yourlabs/django-autocomplete-light – Paolo

答えて

21

私はこの問題を抱えていました。私の結論は、代わりにオートコンプリートフィールドを使用することでした。ほとんどの場合、かなりうまく動作します。唯一の問題は、あなたがほとんど同じエントリをたくさん持っている場合です。たとえば、あなたのケースでは、...あなたは、名前のためににロバートを入力して、リスト内の数百個のロバートエントリがあるかどう

Djangoの管理者にオートコンプリートを追加する多くのアプリがあります

マイ好ましいものは最後のものです。それはよく書かれており、管理者や管理者と一緒に使うことができます。ManyToManyFields、ForeignKeyFields、CharFieldsなどで動作します。

私はこのプロジェクトのforkを検索しました。ルーペ)ボタンをForeignKeyRawIdWidgetのように押します。

+0

素敵.. ..ありがとう – CrazyGeek

4

ForeignKeyRawIdWidgetdjango.contrib.admin.widgetsです。それは検索可能なポップアップを提示する小さなボタンの横に入力としてFKリレーションシップをレンダリングします。

5

最も簡単な解決策は、ModelAdminraw_id_fieldsにフィールドを追加することです。次に、組み込みの検索/フィルタリングを使用できるポップアップウィンドウが表示されます。ペジネーションコントロールを使用して、対象のオブジェクトを見つけて選択します。

あなたが本当にオートコンプリートを望むなら、他の答えはあなたに合理的な出発点を与えます。あなたの管理者設定でfilter_horizontalを使用します。このために非常に適した、組み込みの解決策を見つけた

1

あなたは学校が生徒の長いリストにManyToManyField関係を持つと、SchoolStudentモデルを持っていると言います。

# model.py 
class School(models.Model): 
    ... 
    students = models.ManyToManyField(Student) 

ちょうどあなたのSchoolAdminにこれを追加します。

# admin.py 
filter_horizontal = ('student',) 

あなたはこのような構成を得るでしょう! enter image description here

2

Django 2.0管理者はautocomplete built inです。

class QuestionAdmin(admin.ModelAdmin): 
    ordering = ['date_created'] 
    search_fields = ['question_text'] 

class ChoiceAdmin(admin.ModelAdmin): 
    autocomplete_fields = ['question'] 
関連する問題