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) обычно является пк связанного объекта.