2017-01-26 40 views
0

djangoの使用を開始しましたが、ユーザー情報に基づいてデータをフィルタリングする際に問題が発生しました。私のアプリの仕組みを説明しましょう。私のアプリのユーザーは会社に属しています。だから私は会社情報をキャプチャするために会社と呼ばれるテーブルを作成しました。次に私はUserCompanyという別のテーブルを作成しました。基本的には、DjangoユーザーのIDと私の会社のテーブルのIdを格納します。今、私は、ユーザが会社のIDに基づいてDjango Adminで見るデータをフィルタリングしたいと思います。企業IDに基づいてデータのみを表示できます。 admin.pyでget_querysetを使ってこのユーザーを把握することができました。私の唯一の問題は、外部キーの結果としてadminに表示されるドロップダウンリストがフィルタリングされていないことです。私はいくつかの研究を行い、limit_choices_toについて知った。これを静的に設定することができます。Django admin - ドロップダウンでの選択を制限する

class Cleaner(models.Model): 
    company = models.ForeignKey('Company',limit_choices_to = {'companyname' = 'Test'} 

管理セクションのドロップダウンリストには、会社のテストのみが表示されます。どのようにこれを動的に行うことができますか?私はモデルでやっていますか、それともadmin.pyでやっていますか?助けてください!!

答えて

0

モデルのCustomAdminを設定するようになりました。あなたは、あなたはまた、リクエストオブジェクトへの参照を持っているユーザーオブジェクトにログインへの参照を必要としているためにセッション固有のフィルタがある場合はModelAdminの

の方法
class CleanerAdmin(admin.ModelAdmin): 
    def formfield_for_foreignkey(self, db_field, request=None, **kwargs): 
     if db_field.name == "company": 
       kwargs["queryset"] = Company.objects.filter(name='Test') 
     return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) 

admin.site.register(CleanerAdmin, Cleaner) 

をformfield_for_foreignkeyオーバーライドする必要があります。あなたはここに任意のロジックを書くことができます。

+0

ありがとうございます。これは役に立ちました。 –

関連する問題