Django Rest Framework - search_fields - DatabaseError at /chapters/ No exception message supplied
Основываясь на документации DRF search_fields, я реализовал фильтр поиска в одном из моих API с полем Foreign key. Поэтому при поиске я сталкиваюсь с этой ошибкой. Не могли бы вы, ребята, помочь мне решить эту проблему?
Это моя родительская модель
class Chapter(models.Model):
id = models.UUIDField(
primary_key=True,
default=uuid.uuid4,
editable=False)
name = models.CharField(max_length=256)
short_code = models.CharField(max_length=256, blank=True)
description = models.TextField(blank=True)
start_date = models.DateField(default=None)
end_date = models.DateField(default=None)
status = models.PositiveIntegerField(default=1)
created_by = models.CharField(max_length=256, default=None)
это моя дочерняя модель
class ChapterTopicTag(models.Model):
id = models.UUIDField(
primary_key=True,
default=uuid.uuid4,
editable=False)
name = models.CharField(max_length=256, blank=True)
parent_id = models.ForeignKey(Chapter, on_delete=models.CASCADE)
А это мой набор представлений
class ChapterViewSet(viewsets.ModelViewSet):
serializer_class = ChapterSerializer
filter_backends = [filters.SearchFilter, DjangoFilterBackend]
filterset_fields = ['status']
search_fields = ('name', 'description', 'chpatertopic__name',)
Когда я вызываю url типа http://localhost:8000/parent/?search=childname
Выдает ошибку, которая прикреплена на скриншоте
.








Прежде всего, вашим параметром поиска на ulr будет параметр search_fields, объявленный в вашем View.
Итак... Вместо http://localhost:8000/parent/?search=childname
Вам нужно передать что-то вроде http://localhost:8000/parent/?name=example_name
Правило ?search_field=search_value
После этого у вас опечатка в одном из полей. 'chpatertopic__name'. И вы пытаетесь сделать Обратное отношение для ваших моделей.
На данный момент я рекомендую поместить атрибут related_name в вашу дочернюю модель
Изменить это:
class ChapterTopicTag(models.Model):
id = models.UUIDField(
primary_key=True,
default=uuid.uuid4,
editable=False)
name = models.CharField(max_length=256, blank=True)
#parent_id = models.ForeignKey(Chapter, on_delete=models.CASCADE)
parent_id = models.ForeignKey(Chapter, on_delete=models.CASCADE, related_name='topic')
И тогда у вас появится новое поле поиска 'topic__chapter_name'.