我想在django用户个人资料编辑页面中显示一个模型字段,即module_name
只读。模型Category
与manytomany
模型有Profile
的关系。
Category
id category_name module_name
1 A X
2 B Y
profile_category
id profile_id category_id
1 2 1
所以对于例如。当我在管理页面上编辑2
的用户ID时,如果将类别ID X
分配给用户ID 1
,我希望显示模块名称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
class ProfileInline(admin.StackedInline):
model = Profile
filter_horizontal = ('category',)
class CustomUserAdmin(UserAdmin):
inlines = (ProfileInline, )
list_select_related = ( 'profile', )
如果可能,请建议。
非常感谢任何帮助/建议。提前谢谢。
答案 0 :(得分:2)
使用继承自O(n)
的{{3}}。
admin.BaseModelAdmin
对于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"
网站的旧版本,您可以挂钩admin
get_fieldsets
方法。这个方法发布了readonly_fields
,有一个很好的例子。