Как использовать django-filter для создания фильтра с обратным значением внешнего ключа?
У меня есть модели
class TDebtor(models.Model):
first_name = models.CharField(max_length=250, blank=True, null=True)
surname = models.CharField(max_length=250, blank=True, null=True)
middle_name = models.CharField(max_length=250, blank=True, null=True)
iin = models.CharField(max_length=50, blank=True, null=True)
alive = models.BooleanField(blank=True, null=True)
birth_date = models.DateField(blank=True, null=True)
class TDebtData(models.Model):
agr_num = models.CharField(max_length=250, blank=True, null=True)
id_num = models.CharField(max_length=250, blank=True, null=True)
loan_amount = models.DecimalField(max_digits=15, decimal_places=2, blank=True, null=True)
principal_amount = models.DecimalField(max_digits=15, decimal_places=2, blank=True, null=True)
id_debtor = models.ForeignKey('TDebtor', models.DO_NOTHING, related_name="debtor_debt_data")
views.py
class ProductList(ListAPIView):
queryset = TDebtor.objects.prefetch_related(Prefetch('debtor_debt_data', queryset=TDebtData.objects.select_related('id_debtor')))
for i in queryset:
print(i.debtor_debt_data.agr_num)
serializer_class = TDebtorSerializer
filter_backends = [DjangoFilterBackend]
filterset_fields = ['iin', 'first_name', 'surname', 'middle_name', 'birth_date',
'alive']
Если я сделаю фильтр с полями TDebtor, то это нормально, но как я могу фильтровать с agr_num? То есть, если я отправлю agr_num=1238HFD32, то мне вернется TDebtor, который имеет этот agr_num
. Используйте RELATED_NAME__FIELD
. В вашем случае debtor_debt_data__agr_num
class ProductList(ListAPIView):
...
filterset_fields = [..., `debtor_debt_data__agr_num`]
Документы в https://django-filter.readthedocs.io/en/stable/index.html