35163


[Django管理サイトで外部キーで紐づいている別テーブルの情報を紐づけたい。](https://ja.stackoverflow.com/questions/35148/)

先ほど、上記の質問で外部キーに設定している  
↓のテーブルがあるときに  
別テーブルの情報を引っ張ってくる方法を教えてもらいました。

model.py

[code]

    from django.db import models
    class ShopUserRelation(models.Model):
        shop_id = models.ForeignKey('Shop', db_column = 'shop_id')
        user_id = models.ForeignKey('User', db_column = 'user_id')
    
    class Shop(models.Model):
        name        = models.CharField(max_length = 128)
    
    class User(models.Model):
        name        = models.CharField(max_length = 128)
    
[/code]

admin.py

[code]

    class ShopUserAdmin(admin.ModelAdmin):
        list_display = ('id', 'shop_name', 'user_name')
        def shop_name(self, obj):
            return obj.shop_id.name
        shop_name.short_description = 'Shop Name'
    
        def user_name(self, obj):
            return obj.user_id.name
        shop_name.short_description = 'User Name'
    
[/code]

この追加したshop_nameとuser_nameをフィルタしたいのですが、可能でしょうか。  
下記のようなコードをadmin.pyに追記すると、  
idではフィルタをかけることが可能ですが、shop_nameとuser_nameではフィルタすることはできませんでした。

[code]

    list_filter  = ['id', 'shop_name', 'user_name']
    
[/code]

よろしくお願いします。


CC BY-SA 3.0
2017-05-31T11:54:07.263
35161
2017-05-31T12:54:38.583
7918
question
python django
Django管理サイトで別テーブルの情報にフィルタをかけたい。


Django の list_filter(及びORM)ではForeignKeyのフィールドにアクセスしたい場合は 「model__field」
とアンダースコアを二つ続けて書くことでアクセスできます。したがって下記のように `shop__name` としてみてください。

[code]

    list_filter  = ['id', 'shop__name', 'user___name']
    
[/code]

<https://docs.djangoproject.com/en/1.11/topics/db/queries/#lookups-that-span-
relationships>


CC BY-SA 3.0
2017-05-31T12:54:38.583
35163
2017-05-31T12:54:38.583
2168
35161
answer