Поиск в Django по полю "один к одному

Хочу сделать поиск по нескольким полям из разных классов в моделях. Итак, у меня есть модель 1

class Man(models.Model):
    name = models.CharField(max_length=80)
    date = models.DateField()

И модель 2

class Data(models.Model):
    man = models.OneToOneField(
                                    Man,
                                    on_delete=models.CASCADE,
                                    primary_key=True
                                    )
    data = models.JSONField(null=False)
    

Я пытаюсь создать поиск по полю Man.name и затем по некоторым полям из JSON blob. Мой views.py

class DataList(generics.ListAPIView):
    search_fields = ['man.name']
    filter_backends = (filters.SearchFilter, )
    queryset = Data.objects.all()
    serializer_class = DataSerializer

Но когда я пытаюсь запустить его, у меня возникает ошибка, потому что он не может получить доступ к полю man.name. Как я могу получить к нему доступ для поиска?

Для доступа к атрибутам связанного объекта нужно писать, используя __ вместо ., поэтому правильным вариантом будет:

search_fields = ['man__name']

Это объясняется в документации здесь, вы можете найти раздел, в котором говорится "You can also perform related lookup on a ForeignKey or ManyToManyField with the lookup API double-underscore notation"

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