django получает отдельный объект от многих ко многим

#django

#django

Вопрос:

У меня есть следующие модели :

 class Account(AbstractBaseUser):
    username = models.CharField(max_length=40, unique=True)
    name = models.CharField(max_length=200, null=True)
    is_admin = models.BooleanField(default=False)
    is_hiren = models.BooleanField(default=False)
    is_manager = models.BooleanField(default=False)

    USERNAME_FIELD = 'username'

    objects = AccountManager()

class Company(models.Model):
    admin = models.ForeignKey(Account, on_delete=models.PROTECT, null=True)
    name = models.CharField(max_length=100)


class CompanyDetails(models.Model):
    company = models.ForeignKey(Company, on_delete=models.CASCADE)
    employee = models.ManyToManyField(Account, related_name='employee')
    admin = models.ForeignKey(Account, on_delete=models.PROTECT, null=True)
  

Предположим, у меня есть 7 объектов учетной записи, один администратор и шесть менеджеров (или сотрудников). У администратора несколько компаний, и в этих компаниях назначено пять менеджеров. Одна учетная запись менеджера может быть назначена нескольким компаниям.

Теперь моя проблема в том, как я могу получить все 5 уникальных объектов учетной записи сотрудника?

вот что я пробовал :

 @login_required
def employee_list(request):
    employees = get_list_or_404(CompanyDetails, admin=request.user)
  print(CompanyDetails.objects.filter(employee__in=Account.objects.all()).distinct())
  

Комментарии:

1. определите «5 уникальных объектов учетной записи сотрудника». уникальный в каком смысле? какова отправная точка? Company объект? И почему существует admin внешний ключ для обоих Company и CompanyDetails ?

Ответ №1:

Всегда начинайте с модели, которую вы хотите получить. Здесь вы хотите получить учетные записи, поэтому начните оттуда.

 Account.objects.filter(company__companydetails__admin=request.user)