带有外键名称的Django ViewSet过滤

时间:2018-12-01 16:56:03

标签: django django-rest-framework django-views

我有2个具有以下结构的Django模型:

class Title(models.Model):
    id = models.AutoField(primary_key=True)
    code = models.CharField(unique=True, max_length=256)

class Component(models.Model):
    id = models.AutoField(primary_key=True)
    code = models.CharField(unique=True, max_length=256)
    title = models.ForeignKey('Title', on_delete=models.PROTECT)

所以我有一个如下的ComponentViewSet:

class ComponentViewSet(viewsets.ModelViewSet):

    queryset = Component.objects.all()
    serializer_class = ComponentSerializer

    filter_fields = {
        'id': ['exact'],
        'code': ['exact', 'istartswith'],
        'title': ['exact'],
    }

因此,如果我想通过标题过滤组件,则URL为http://localhost:8010/api/components/?title=1。 如何使用Title.code值(即http://localhost:8010/api/components/?title=Test)进行视图过滤?

1 个答案:

答案 0 :(得分:3)

尝试

class ComponentViewSet(viewsets.ModelViewSet):

    queryset = Component.objects.all()
    serializer_class = ComponentSerializer

    filter_fields = {
        'id': ['exact'],
        'code': ['exact', 'istartswith'],
        'title__code': ['exact'],
    }

但是,该网址将变为

 http://localhost:8010/api/components/?title__code=Test


建议
您可以使用django-filter,它可以更好地控制 URL过滤