35150


Django管理サイトで外部キーで紐づいている別テーブルの情報を紐づけたいのですが可能でしょうか？

例として下記のような３つのテーブルを考えました。  
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]

Django管理サイトでShopUserRelationのレコードの一覧画面で  
id, shop.name, user.name を一覧として出力したいのですが、可能でしょうか。  
下記のような並び順で出力されることが理想です。  
よろしくお願いします。

admin.py

[code]

    from django.contrib import admin
    from .models import *
    
    class ShopUserAdmin(admin.ModelAdmin):
        list_display = ('id', 'shop_name', 'user_name')
    
    admin.site.register(ShopUser, ShopUserAdmin)
    admin.site.register(Shop, ShopAdmin)
    admin.site.register(User, UserAdmin)
    
[/code]


CC BY-SA 3.0
2017-05-31T04:14:58.480
35148
2017-05-31T07:44:20.997
7918
question
python django
Django管理サイトで外部キーで紐づいている別テーブルの情報を紐づけたい。


Djangoのドキュメントに書き方が載っていました。  
<https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display>

以下のように書けば良さそうです.

admin.py::

[code]

    from django.contrib import admin
    from .models import *
    
    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'
    
    admin.site.register(ShopUser, ShopUserAdmin)
    admin.site.register(Shop, ShopAdmin)
    admin.site.register(User, UserAdmin)
    
[/code]


CC BY-SA 3.0
2017-05-31T04:42:49.427
35150
2017-05-31T07:44:20.997
2017-05-31T07:44:20.997
7918
806
35148
answer