Это, вероятно, не лучший способ 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)
(на странице группы в django -админ)
Спасибо за ваше время!