Django在一个模型中使用多个外键

时间:2017-08-31 08:41:41

标签: python django django-models

我正在创建一个人力资源项目,包括3个应用程序'主要网站' CandidatePart',' CompanyPart'。

我需要建议构建我的模型,现在如下:

CompanyPart:

class Company(models.Model):
       company_name = models.CharField(max_length = 250)

       def __str__(self):
          return self.company_name

class Team(models.Model):
       company = models.ForeignKey(Company, on_delete=models.CASCADE)
       team_name = models.CharField(max_length = 500)

       def __str__(self):
           return self.team_name

class TeamMember(models.Model):
      team = models.ManyToManyField(Team)
      first_name = models.CharField(max_length=150)
      last_name = models.CharField(max_length=150)
      position = models.CharField(max_length=150,default='')

      def __str__(self):
          return self.first_name + ' ' + self.last_name + ' as ' + self.position

class HR_member(models.Model):
      company = models.ForeignKey(Company, on_delete=models.CASCADE)
      first_name = models.CharField(max_length=150)
      last_name = models.CharField(max_length=150)

      def __str__(self):
      return self.first_name + ' ' + self.last_name

CandidatePart:

class Candidate(models.Model):
    HR = models.ForeignKey('CompanyPart.HR_member')
    company = models.ForeignKey('CompanyPart.company', default = '')
    first_name = models.CharField(max_length=150)
    last_name = models.CharField(max_length=150)
    email = models.EmailField()

我有两个外国人来访问HR和公司

那么,如果选择任何公司,我如何根据人力资源选择隐藏其他公司详细信息或隐藏其他人力资源详细信息。

1 个答案:

答案 0 :(得分:0)

您可以通过在相应模块/应用的admin.py中添加代码来在管理控制台上进行过滤。例如,如果我的项目名称是xyz,并且我有一个名为a,b和c的应用程序,我想对b进行一些过滤,那么在b / admin.py中执行以下操作:

class xxxAdmin(admin.ModelAdmin):
//list_display = ['user', 'business_name'] => this line displays needed columns only, optional.

def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == "user":
        kwargs["queryset"] = User.objects.filter(is_staff=True)

    return super(xxxAdmin, self).formfield_for_foreignkey(db_field, request,**kwargs)

我希望这就是你要找的东西。

有关详细信息,请参阅官方文档here

相关问题