首页 > 解决方案 > 如何在 Django 模型的另一个模型中根据角色显示用户?

问题描述

模型.py

class Employee(models.Model):
ROLE = (
    ('Courier', 'Courier'),
    ('Receptionist', 'Receptionist'),
    ('Admin', 'Admin')
)
user = models.OneToOneField(User,null=True, on_delete=models.CASCADE)
fullname = models.CharField(max_length=400, null=True)
role = models.CharField(max_length=200, null=True, choices=ROLE)
active = models.BooleanField(default=False, blank=True, null=True)
def __str__(self):
    return self.fullname






class OutgoingMail(models.Model):
    mail_ref = models.CharField(max_length=250, null=True)
    mail_to = models.CharField(max_length=250, null=True)
    courier = models.ForeignKey(Employee, null=True, on_delete=models.SET_NULL)
    def __str__(self):
        return self.mail_to

所以,我的问题是:如何根据员工模型中的员工角色在外发邮件中显示员工姓名。仅显示角色为“快递员”的员工?

如下图所示,在 django admin 中,当我想创建外发邮件时,显示基于员工的员工角色

标签: djangodjango-models

解决方案


如果你想在 Django admin 的字段集中过滤外键你基本上可以在你的 Admin 类中使用 formfield_for_foreignkey 函数

def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == "courier": #courier is the foreignkey name
        kwargs["queryset"] = Employee.objects.filter(role='Courier') #role ='Courier' in choices
    return super().formfield_for_foreignkey(db_field, request, **kwargs)





  

推荐阅读