

Django 1.6でadminの機能を使ってます。  
Modelの外部キーにフィルターをかけた状態で表示させたいです。

Modelは

[code]

    class Hoge(models.Model):
        user = models.ForeignKey(User, unique=False, verbose_name=u'ユーザ')
    
[/code]

と

[code]

    class Bar(models.Model):
        user = models.ForeignKey(User, unique=False, verbose_name=u'ユーザ')
        questions = models.ForeignKey(Hoge)
    
[/code]

のように２つのHogeとBarのModelがあるときに、  
admin.pyで

[code]

    class BarAdmin(admin.ModelAdmin):
        # 略
    
[/code]

で、Barを表示ています。

Barをadminで編集するときには、  
![adminでフィルター](https://i.stack.imgur.com/wwwoz.png)  
このようになりますが、そこにフィルターをかけたいです。

一応やれそうな方法で、

[code]

    class BarAdmin(admin.ModelAdmin):
        form = BarForm
    
[/code]

とし、BarFormを

[code]

    class BarForm(forms.ModelForm):
        def __init__(self, *args, **kwargs):
            # なぜかできない・・・・
            self.request = kwargs.pop("request")
            # 略
    
[/code]

としましたが、kwargsにはrequestのキーが無いため、  
今アクセスしているuserを取得できません。

ご教示よろしくお願い致します。


CC BY-SA 3.0
2015-03-20T01:37:00.570
8159
2015-12-19T18:27:51.860
7934
question
python django
Djangoの管理サイト（admin）で外部キーにUserでフィルターをかけた状態で表示させたい


`Bar`の`questions`Fieldをrequest.userでfilterしたい場合は、かきのとおりになるでしょうか？

[code]

    class BarAdmin(admin.ModelAdmin):
        def formfield_for_foreignkey(self, db_field, request, **kwargs):
            if db_field.name == "questions":
                kwargs["queryset"] = Hoge.objects.filter(user=request.user)
            return super(BarAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
    
[/code]

<https://docs.djangoproject.com/en/1.8/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey>


CC BY-SA 3.0
2015-03-24T08:27:57.013
8322
2015-03-24T08:27:57.013
2314
8159
answer