Django фильтр: поле «Многие ко многим» указывает c поле для настраиваемого поля группы - PullRequest
0 голосов
/ 13 апреля 2020

Это, вероятно, не лучший способ go о правах пользователя, хотя у меня есть список групп пользователей, которые содержат имена рынков и встроенное поле, содержащее "Market_id".

В пределах В моделях, которые я фильтрую, у меня есть связь ManytoMany, связанная с другой моделью под названием «Рынки». Модель «Рынки» также имеет поле «market_id».

Как я могу go предоставить пользователю только те объекты, которые находятся в его "Market" или группе?:

Модели, которые я фильтрую:

class Opportunity(models.Model):
    opportunityid = models.CharField(max_length=500, blank=True)
    market = models.ManyToManyField('Market', related_name ='market', blank= True)

Модель рынка - отношение M2M:

class Market(models.Model):
    marketname = models.CharField(max_length=500)
    market_id = models.CharField(max_length=100, blank=True)
    def __str__(self):
        return self.marketname

Моя попытка в наборе запросов - в настоящее время возвращает пустой набор запросов, даже если у моего пользователя есть разрешения для всех рынков или групп:

class projectViewSet(viewsets.ModelViewSet):
   serializer_class = ProjectSerializer
   authentication_classes = [SessionAuthentication]
   permission_classes = [IsAuthenticated]

   def get_queryset(self):
      user = self.request.user
      groups = user.groups.all()

      finalgroups = []

      for g in groups:
        finalgroups.append(g.market_id)

      queryset = Opportunity.objects.all()

      queryset = queryset.filter(market__market_id__in = finalgroups)

      return queryset

В случае, если это не очень понятно - я добавляю пользователя в общий c Django Группа пользователей - эти группы пользователей имеют настраиваемое поле с именем «market_id». См. Скриншоты ниже для уточнения:

(на странице пользователя в django -admin) Within the user section

(на странице группы в django -админ) enter image description here

Спасибо за ваше время!

...