我有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)进行视图过滤?
答案 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过滤