削除済みとしてマークし、さまざまな場所で削除されたものを除外するソフト削除スキームがあります。削除されたものをグレーペリのオートコンプリート候補から除外する方法を見つけようとしています。
3 に答える
最後に、私はこれで行きました:
from grappelli.views.related import AutocompleteLookup
class YPAutocompleteLookup(AutocompleteLookup):
""" patch grappelli's autocomplete to let us control the queryset
by creating a autocomplete_queryset function on the model """
def get_queryset(self):
if hasattr(self.model, "autocomplete_queryset"):
qs = self.model.autocomplete_queryset()
else:
qs = self.model._default_manager.all()
qs = self.get_filtered_queryset(qs)
qs = self.get_searched_queryset(qs)
return qs.distinct()
関連する URL を上書きすることでインストールできます。
url(r'^grappelli/lookup/autocomplete/$', YPAutocompleteLookup.as_view(), name="grp_autocomplete_lookup"),
これが URL で Grappelli の前にあることを確認してください。
管理サイトで作業している場合は、ModelAdmin.queryset 関数を利用する必要があります: https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#django.contrib.admin.ModelAdmin.queryset
結果を制限するようにデフォルトのモデル マネージャーを変更するのは良くない考えであり、あらゆる種類の厄介な問題を引き起こすことがわかりました。例: syncdb、shell、または shell_plus の実行を妨げます。空のデータベースに最初のレコードを追加することを不可能にします。正確なエラーは、制限内容によって異なりますが、いくつか発生することは間違いありません。
ここで必要なのは、Grappelli に使用するクエリセット マネージャーの名前を伝える方法です。渡されたか、おそらく設定?
ForeignKey.limit_choices_to を使用して、単純な (定数または関連フィールド) フィルターを指定できます。Grappelli はこの値を取得し、GET で param 'query_string' として送信します。
ただし、これでは不十分な場合があります。使用するレコード マネージャーを指定する方法を追加するために使用する Grappelli リポジトリにリクエストを投稿しました。または、管理クエリセット (ModelAdmin.queryset) を自動的に使用します。
私の投稿はこちら: https://github.com/sehmaschine/django-grappelli/issues/362