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

Выдает ошибку, которая прикреплена на скриншотеError Screenshot one. Error Screenshot 2Error Screenshot 3Error Screenshot FourError Screenshot 5Error Screenshot 6Error Screenshot 7Error Screenshot 8Error Screenshot 9

Прежде всего, вашим параметром поиска на 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'.

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