7

削除済みとしてマークし、さまざまな場所で削除されたものを除外するソフト削除スキームがあります。削除されたものをグレーペリのオートコンプリート候補から除外する方法を見つけようとしています。

4

3 に答える 3

7

最後に、私はこれで行きました:

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 の前にあることを確認してください。

于 2013-07-25T09:47:29.233 に答える
1

管理サイトで作業している場合は、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

于 2013-07-31T21:44:13.373 に答える