繁体   English   中英

django管理站点查看一对一类字段

[英]django admin site view one to one classes fields

在我的模型中:

class Professor(models.Model):
  user = models.OneToOneField(User)
  salary = models.FloatField()
class Student(models.Model):
  user = models.OneToOneField(User)
  birth_date = models.DateField()

在我的admin.py中

from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User

UserAdmin.list_display = ('email', 'first_name', 'last_name','is_active','date_joined', 'is_staff')

如果用户是教授还是学生,我如何在用户管理网站内显示?是否可以访问基于模型的个性化属性,如薪水。

您可以在list_display中使用自定义方法。 这是代码:

from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin
from django.contrib.auth.models import User

class UserAdmin(DjangoUserAdmin):
    list_display = ('email', 'first_name', 'last_name','is_active','date_joined', 'is_staff', 'user_type', 'salary')

    def user_type(self, instance):
        try:
            instance.student
            return "student"
        except Student.DoesNotExist:
            return "professor"

    def salary(self, instance):
        try:
            return instance.professor.salary
        except Professor.DoesNotExist:
            return "N/A"

    def queryset(self, request):
        qs = super(UserAdmin, self).queryset(request)
        # To reduce database calls
        return qs.select_related('student', 'professor')


admin.site.unregister(User)
admin.site.register(User, UserAdmin)

它将在change_list管理页面中添加其他列user_typesalary

更新 :感谢@AdriánLópez 现在从django内置的UserAdmin进行子类化。

您可以使用内联

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User

class ProfessorInline(admin.StackedInline):
    model = Professor

class StudentInline(admin.StackedInline):
    model = Student

class MyUserAdmin(UserAdmin):
    inlines = [ProfessorInline, StudentInline]


admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)

这不是完美的。 它应该在您的User管理面板中同时显示ProfessorStudent字段。 它不会明确指出是Professor还是Student 老实说,这没有多大意义,因为您没有使用继承,因此从技术上来说,您可能会同时拥有既是Professsor又是StudentUser

如果您更喜欢TabularInline ,也可以尝试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM