Как использовать 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

Вернуться на верх