2

我有以下型号

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物体。并抓取每个场地的uservenue对象权限

我有两种方法可以做到这一点。使用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')
4

1 回答 1

2

这是答案。但是我仍然需要按用户对场地进行分组。正在努力。

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')
于 2018-05-04T19:51:09.013 回答