Django фильтр для ForeignKey, включенного в ManyToMany

Не знаю, устал ли я или ответ прост, но я его не вижу

У меня есть такая модель:


class Company(models.Model):
    name = models.CharField(max_length=32, unique=True)
    

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    company_admin = models.ManyToManyField(Company)
    # ...


class GroupData(models.Model):
    name = models.CharField(max_length=32)
    company = models.ForeignKey(
        Company, on_delete=models.CASCADE)

Если в представлении я делаю:

print(request.user.userprofile.company_admin.all())

...Я получаю QS со всеми компаниями, к которым принадлежит пользователь и которые являются Ok.

Мне нужно получить фильтр для GroupData, где компания "включена" в эту QS, чтобы получить только объекты GroupData на основе права пользователя "company_admin".

Может ли кто-нибудь помочь мне понять, как получить этот фильтр?

Большая благодарность

Если я правильно понимаю требование:

user_company_pks = users_profile.company_admin.all().values_list( 'pk', flat=True)

filtered_groupdata = Groupdata.objects.filter( company__pk__in=user_company_pks )

Первая возвращает список pks. Второй фильтрует объекты groupdata, в которых есть компания с пк в этом списке

Возможно, стоит исследовать, является ли

 filtered_groupdata = Groupdata.objects.filter( company_id__in=user_company_pks )

(a) работает, а (b) значительно эффективнее. Значением внешнего ключа (company_id) обычно является пк связанного объекта.

Вернуться на верх