Поиск в 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"