2017-09-08 10 views
2

モデルフィールド、つまりmodule_nameをdjangoのユーザプロファイル編集ページで読み取り専用として表示したいとします。モデルCategoryProfileモデルとmanytomanyの関係にあります。例えばのためのモデルフィールドをDjangoの管理者に表示する

id profile_id category_id 
1  2    1 

ので

profile_category

id category_name module_name 
1 A    X 
2 B    Y 

Category。私は2のユーザIDを編集するには、管理ページの午前とき、私はカテゴリID 1は、ユーザID 2

models.py

class Category(models.Model): 
    category_name = models.CharField(max_length=150, blank=False, null=True, default="", unique=True) 
    module_name = models.TextField(blank=False, null=True) 

class Profile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name ='profile') 
    phone_number = PhoneNumberField(blank=True, null=True) 
    organisation = models.CharField(max_length=30, blank=True) 
    category = models.ManyToManyField(Category) 

admin.py

に割り当てられている場合、モジュール名 Xを表示したいと思います
class ProfileInline(admin.StackedInline): 
    model = Profile 
    filter_horizontal = ('category',) 

class CustomUserAdmin(UserAdmin): 
    inlines = (ProfileInline,) 
    list_select_related = ('profile', ) 

これが可能かどうかをご提案ください。

ご協力いただきありがとうございます。前もって感謝します。

答えて

2

admin.BaseModelAdminから継承された方法1

使用readonly_fields

class ProfileInline(admin.StackedInline): 
    model = Profile 
    readonly_fields = ('module_names',) 

    def module_names(self, instance): 
     # Write a get-method for a list of module names in the class Profile 
     # return HTML string which will be display in the form 
     return format_html_join(
       mark_safe('<br/>'), 
       '{}', 
       ((line,) for line in instance.get_module_names()), 
     ) or mark_safe("<span>The user belongs to no category</span>") 

    # short_description functions like a model field's verbose_name 
    module_names.short_description = "Module names" 

方法2

adminサイトの古いバージョンでは、あなたはadmin.StackedInlineget_fieldsets方法をフックすることができます。このメソッドは、hereという素晴らしい例で投稿されました。

+0

多くのお客様に感謝します。 'Profile'クラスの内部でモジュール名を取得するのに苦労します。私はprofile_category&カテゴリテーブルから値を取得しようとしています。クエリーは 'category、profile_categoryからselect module_nameにする必要があります。ここでprofile_category.profile_id = 2、category.id = profile_category.category_id' –

+0

解決しました。ご協力いただき誠にありがとうございます。 –

関連する問題