【问题标题】:django rest framework filter on related tables相关表上的 django rest 框架过滤器
【发布时间】:2020-06-12 12:29:17
【问题描述】:

我需要帮助过滤相关表中的字段。

我有两个模型 Kalas 和名称,其中一个(Kalas 模型)与基本 User 模型具有一对一的关系:

class Kalas(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    visitKalas = models.ForeignKey('self', on_delete=models.DO_NOTHING, blank=True, null=True)
    isActive = models.BooleanField(default=True)
    capacity = models.IntegerField(default=0)
    fullName = models.CharField(max_length=100, default="default name")
    phoneNumber = models.IntegerField()
    address = models.CharField(max_length=40)
    postal = models.CharField(max_length=50)
    time = models.DateTimeField(auto_now_add=True)
    lat = models.FloatField(default=0)
    lng = models.FloatField(default=0)

    def __str__(self):
        return "user: %s, address: %s %s" % (self.user, self.address, self.postal)

class names(models.Model):
    kalasID = models.ForeignKey(Kalas, on_delete=models.CASCADE, related_name='names')
    name = models.CharField(max_length=30)

我已经做了一个嵌套的序列化器:

class NamesMapSerializer(serializers.ModelSerializer):
class Meta:
    model = names
    fields = ['name']


class KalasMapSerializer(serializers.ModelSerializer): #bruk denne hver gang man vil ha kalas og navn sammen
    names = NamesMapSerializer(many=True, read_only=True)
    class Meta:
        model = Kalas
        fields = ['id', 'fullName', 'capacity', 'lat', 'lng', 'names']


class MapSerializer(serializers.ModelSerializer):
    kalas = KalasMapSerializer()
    class Meta:
        model = User
        fields = ['username', 'kalas']

以及列出所有用户及其名称的视图:

class MapViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    permissions_classes = [permissions.AllowAny]
    serializer_class = MapSerializer

但我不知道如何过滤,所以它只向有 kalas 的用户显示我激活了 kalas.isActive=True。

我已经尝试过了,但现在它检查的是用户模型 is_active 而不是 Kalas 的 isActive 字段:

class ActiveOnMap(generics.ListAPIView):
    def get_queryset(self):
        return User.objects.all().filter(isActive=True)
    serializer_class = MapSerializer

请帮助我是新手:)

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    更新您的查询集过滤器,如下所示:

    class ActiveOnMap(generics.ListAPIView):
        def get_queryset(self):
            return User.objects.filter(kalas__isActive=True)
        serializer_class = MapSerializer
    

    希望对你有帮助:)

    【讨论】:

    • 非常感谢它的工作! :) 我赞成您的回答,但由于我的声誉不超过 15,因此不会显示。谢谢你!
    猜你喜欢
    • 1970-01-01
    • 2014-02-17
    • 2012-12-24
    • 2017-05-27
    • 2017-10-26
    • 2018-05-17
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多