запросы связанных объектов django rest framework - PullRequest
0 голосов
/ 04 мая 2018

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

class STUser(AbstractBaseUser):
    email = models.EmailField(unique=True)
    name = models.CharField(max_length=255)
    companyname = models.CharField(max_length=200, blank=True, null=True)
    ...

class VenuePermissions(models.Model):
    user = models.ForeignKey(STUser, on_delete=models.CASCADE)
    venue = models.ForeignKey(Venue, on_delete=models.CASCADE) 
    signupvaildatestring = models.CharField(max_length=200, blank=True, null=True)
    ...

Я хочу захватить все STUser объекты и получить все их разрешения.

Итак, я хотел бы захватить все VenuePermissions объекты. И возьмите user и venue объект каждого объектаPermission

Два способа сделать это. используйте атрибут VenuePermissions_set в STUser, но как мне получить место, когда оно будет иметь значение pk?

Или сфокусируйтесь на объектах VenuePermissions и выберите пользователя и место проведения из значений pk, но как?

Я помню вложенные запросы и вроде как сделал один в своем коде просмотра.

вот пример:

 rooms = Room.objects.filter(venue=OuterRef('pk'), sixtyroundseatingoption= True)
            venuelist = venuelist.annotate(sixtyrounds=Exists(rooms))
            venuelist = venuelist.filter(Q(sixtyrounds = True) | Q(fullbuyoutsixtyroundseatingoption = True))

Я установил объекты в сериализаторе до

Пример сериализатора:

class RoomAndImageSerializer(serializers.ModelSerializer):
    roomimage_set = RoomImageSerializer(many=True, read_only=True)
    class Meta:
        model = Room
        fields = ('pk','name')

любая помощь с этим запросом будет оценена!

Так вот, что я сейчас пытаюсь, я отправлю ответ, если это сработает:

class VenueUserList(ListAPIView):
    serializer_class = VenueUserListSerializer
    queryset = VenuePermissions.objects.select_related('user').select_related('venue').filter(signupvaildatestring=None)

class VenueUserListSerializer(serializers.ModelSerializer):
    user = UserSerializer()
    venue = VenueSerializer()
    class Meta:
        model = VenuePermissions
        fields = ('user', 'venue', 'isvenueviewer', 'isvenueeventplanner', 'isvenueadministrator')

1 Ответ

0 голосов
/ 04 мая 2018

Вот ответ. Однако мне все еще нужно сгруппировать места по пользователю. Работаю над этим.

class VenueUserList(ListAPIView):
    serializer_class = VenueUserListSerializer
    queryset = VenuePermissions.objects.select_related('user').select_related('venue').filter(signupvaildatestring=None)

class VenueUserListSerializer(serializers.ModelSerializer):
    user = UserSerializer()
    venue = VenueSerializer()
    class Meta:
        model = VenuePermissions
        fields = ('user', 'venue', 'isvenueviewer', 'isvenueeventplanner', 'isvenueadministrator')
...