在Django中,我在列表视图中想要的大多数字段都通过外键链接:
class MyUserAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email', )
def first_name(self, obj):
return obj.dragonuser.first_name
def last_name(self, obj):
return obj.dragonuser.last_name
def email(self, obj):
return obj.dragonuser.email
first_name.short_description = 'First name'
last_name.short_description = 'Last name'
email.short_description = 'Email address'
这很有效,但是因为Django从未从数据库中获取任何这些字段,所以它无法对它们进行排序或使用它们进行过滤。那很糟。所以我直接进入了数据库。我不想用它来创建或编辑实例。我有自定义表单。我想使用该自定义表仅列出元素。但我不知道在哪里添加该代码。在管理员定义?在经理?别处?
我可以在管理器中创建自定义方法,但是如何告诉管理员视图调用该特定函数?
当在管理员中调用方法changelist_view
时,已经对数据库进行了调用(根据我通过检查传递给它的参数来判断):
def changelist_view(self, request, extra_context=None):
from pprint import pprint
pprint(dir(request))
return super(BaseUserAdmin, self).changelist_view(request, extra_context)
那么我应该在哪里告诉Django只为列表操作使用另一个数据库表(实际上是一个视图)?