如何在Django Admin Inline中添加计算字段并解决未知字段报错
Django Admin Inline添加计算字段报错解决方案
报错原因
Django Admin 内联组件会优先校验fields中声明的字段是否属于绑定的模型(这里是MyMembership),自定义的计算方法默认不会被识别为合法字段,因此抛出Unknown field(s) (size) specified for MyMembership错误。
修复方案
修改admin.py中的MyMembershipInline定义,给自定义计算方法添加字段声明即可,修改后完整代码如下:
from django.contrib import admin from .models import MyUser, MyMembership class MyMembershipInline(admin.TabularInline): model = MyMembership fields = ( "group", "timestamp", "size", ) readonly_fields = ( "timestamp", "size", ) # 声明这是一个展示字段,description为表格列头显示文本 @admin.display(description="组容量") def size(self, instance): return instance.group.size # 可选优化:提前关联查询group,减少数据库查询次数 def get_queryset(self, request): return super().get_queryset(request).select_related("group") @admin.register(MyUser) class MyUserAdmin(admin.ModelAdmin): fields = ("user_name",) inlines = (MyMembershipInline,)
低版本Django兼容(3.2以下版本)
如果使用的Django版本低于3.2,不支持@admin.display装饰器,可以替换为给方法手动添加属性的写法:
def size(self, instance): return instance.group.size size.short_description = "组容量"
额外注意
你原代码中class MyUserAdmin(admin.ModelAdmin)后缺少冒号,属于基础语法错误,也需要同步修正。
内容的提问来源于stack exchange,提问作者trubliphone
相关产品推荐
相关产品推荐

