python - 如何使用 django 中的函数在另一个表中显示值
问题描述
我一直在尝试让 search_fields 能够在 django 管理页面上的另一个表中搜索字段。我发现我可以使用一个函数来实现我的目标,但是当我进入管理页面时,它会显示 <django.db.models.query_utils.DeferredAttribute object at 0x00000208375C9280> 来代替我希望它显示的数据
这是我的 admin.py 文件:
from django.contrib import admin
from .models import RiskRegister, Category, Severity, RSev
from account.models import Account
class RiskRegisterAdmin(admin.ModelAdmin):
list_display = ['id', 'user', 'user_dept', 'date', 'category', 'roles', 'responderID', 'severity',
'action_taken_explanation', 'created_at']
list_filter = ['id', 'user', 'date', 'category', 'roles', 'responderID', 'severity', 'action_taken_explanation']
search_fields = ['id', 'user', 'user_dept', 'date', 'category', 'roles', 'responderID', 'severity', 'created_at']
def user_dept(self, obj):
return Account.department
我的 models.py 文件包含 Account 模型:
class Account(AbstractBaseUser, PermissionsMixin):
username = models.CharField(max_length=150, unique=True)
email = models.EmailField(verbose_name='email', max_length=254, unique=True)
department = models.CharField(verbose_name='department', max_length=100, editable=True)
first_name = models.CharField(verbose_name='first name', max_length=254, blank=True)
last_name = models.CharField(verbose_name='last name', max_length=254, blank=True)
date_joined = models.DateTimeField(verbose_name='date joined', auto_now_add=True)
last_login = models.DateTimeField(verbose_name='last login', auto_now=True)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
如何让它显示部门中的内容?
解决方案
这obj
是这里的模型对象,您可以通过以下方式呈现它obj.user.department
:
class RiskRegisterAdmin(admin.ModelAdmin):
list_display = ['id', 'user', 'user_dept', 'date', 'category', 'roles', 'responderID', 'severity',
'action_taken_explanation', 'created_at']
list_filter = ['id', 'user', 'date', 'category', 'roles', 'responderID', 'severity', 'action_taken_explanation']
search_fields = ['id', 'user', 'user_dept', 'date', 'category', 'roles', 'responderID', 'severity', 'created_at']
def user_dept(self, obj):
return obj.user.department
.select_related(…)
您可以使用子句 [Django-doc]提高效率:
class RiskRegisterAdmin(admin.ModelAdmin):
# ⋮
def get_queryset(self, request):
qs = super().get_queryset(request).select_related('user')
推荐阅读
- c# - 最小起订量错误:“预期在模拟上至少调用一次,但从未执行”
- javascript - 我可以在 Google 饼图中对两个值进行分组/求和/组合吗?
- amazon-web-services - Amazon SES:向大量用户发送邮件
- powerbi - 使用切片器的 SamePeriodLastYear 的 Power BI Count 无法正常工作
- primefaces - JSF如何在bean中传递CommandButton的值
- excel - 如果列中的值为否(50+列/表)使用循环隐藏多个工作表
- android - FirebaseStorage 无法正确存储绘图
- c++ - OpenCL vs CUDA:固定内存
- c++11 - C ++ 11 /不可构造但可复制?
- apache - Moodle - 没有可用的监听套接字正在关闭