【发布时间】:2021-06-03 06:31:16
【问题描述】:
我与直通模型(联合表)有多对多关系。我想利用 DRF 中的 search_fields 或其他自定义过滤器来过滤 through 模型中的字段。
模型 1:
class Company(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255, blank=False, null=False)
source = models.CharField(max_length=255, blank=False, null=False)
ein_number = models.CharField(max_length=255, blank=True, null=False)
record_keepers = models.ManyToManyField(
'record_keepers.RecordKeepers', through='record_keepers.CompanyRecordKeepers',
related_name='record_keepers')
模型 2(通过模型):
class CompanyRecordKeepers(models.Model):
id = models.AutoField(primary_key=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
filing_year = models.IntegerField(blank=False, null=False)
company = models.ForeignKey('employers.Company', on_delete=models.PROTECT,
blank=True, null=False)
record_keeper = models.ForeignKey('RecordKeepers', on_delete=models.PROTECT, blank=True, null=False)
模型 3:
class RecordKeepers(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255, unique=True, blank=True, null=True)
现在在我看来,我想搜索在filing_year 2019 中提交且record_keeper 名称包含some_value 的公司
查看:
class ListCompanyView(generics.ListAPIView):
serializer_class = CompanySerializer
permission_classes = [IsAdminUser]
filter_backends = (SearchFilter,)
search_fields = ['companyrecordkeepers__filing_year']
queryset = Company.objects.all()
理想情况下,我可以使用一些参数进行 GET 请求以进行过滤:
?companyrecordkeepers__filing_year=2019&name=some_value
知道如何做到这一点吗?
【问题讨论】:
标签: python django django-rest-framework django-filter