繁体   English   中英

Django ManyToMany 字段管理员显示最高值

[英]Django ManyToMany Field admin display highest value

我想知道如何在管理员的 ManyToMany 字段中显示“最高值”。 这是我的models.py文件:

class Personal(models.Model):
    lastname  = models.CharField(max_length = 100)
    firstname = models.CharField(max_length = 100)
    degree = models.ManyToManyField('Degree')
    
    def __str__(self):
        return self.lastname

class Degree(models.Model):
    name_degree = models.CharField(verbose_name = 'Degree', max_length = 200, blank = False)
    rank = models.PositiveIntegerField(default = 0)

    def __str__(self):
        return self.name_degree

在我的支持下,我创建了不同类型的学位,都带有“排名”。 就我而言,您可以获得的最高学位是“博士学位”,排名为“6”。 支持教育的管理员列表

因此,如果用户在“个人”中创建自己,他将可以选择 select 他已获得的所有学位。 但是对于我的个人列表,我只想看到最高的,例如如果用户选择“学士学位”和“硕士学位”,则个人列表应该只包含“硕士学位”,因为 5 > 4。

有人知道我的admin.py文件应该是什么样子吗?

class PersonalAdmin(admin.ModelAdmin):
    list_display = ('lastname', 'firstname', ) # 'degree'

您可以用最高程度注释QuerySet ,然后定义一个将呈现该最大值的方法:

from django.db.models import Max

class MyModelAdmin(admin.ModelAdmin):
    list_display = ['lastname', 'firstname', 'max_degree']

    def get_queryset(self, request):
        queryset = super().get_queryset(request).annotate(
            max_degree=Max('degree__rank')
        )

    def max_degree(self, obj):
        return obj.max_degree

暂无
暂无

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

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