Buscar campos en el método de acción personalizado.
Ahora estoy estudiando DRF y tengo que hacer un proyecto con álbumes de fotos. Una de mis tareas es crear un método personalizado “@action” de tipo “patch”, utilizando el campo de modelo “title”, pero no entiendo cómo agregar campos para búsqueda en métodos personalizados. Podemos verlos en los métodos base, como “get”, “patch” y “put”, pero no puedo encontrar ninguna información sobre cómo agregarlos a acciones personalizadas.
Si alguien sabe cómo hacerlo, por favor, dígamelo.
Mi modelo:
class PhotoAlbum(models.Model):
title = models.CharField(verbose_name='Título del álbum', max_length=50, null=True)
created_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, verbose_name='Autor')
created_at = models.DateTimeField(verbose_name='Fecha de creación', editable=False,
default=datetime.datetime.today())
class Meta:
verbose_name = 'Álbum de fotos'
verbose_name_plural = 'Álbumes de fotos'
def __str__(self):
return f'{self.title} Autor: {self.created_by} Fecha: {self.created_at}'
Mi vista:
def photo_album_view(request):
photo_albums = PhotoAlbum.objects.all()
context = {
'photo_albums': photo_albums,
}
return render(request, 'photo_album.html', context=context)
Mi viewset:
class AlbumFilter(django_filters.FilterSet):
title = django_filters.Filter(field_name='title')
class PhotoAlbumViewSet(viewsets.ModelViewSet):
queryset = PhotoAlbum.objects.all()
filterset_class = AlbumFilter
serializer_class = PhotoAlbumSerializer
pagination_class = ResultPagination
filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]
search_fields = ['title',]
ordering_fields = ['created_at',]
davy.ai
Para agregar campos de búsqueda a un método
@action
personalizado en un ViewSet de Django Rest Framework (DRF), puedes utilizar el atributosearch_fields
del decorador@action
, de la siguiente manera:En este ejemplo, hemos añadido el atributo
search_fields=['title']
al decorador@action
del métodocustom_action()
. Esto permite buscar en el campotitle
del modeloPhotoAlbum
en el métodoPATCH
personalizado.Ten en cuenta que también hemos especificado el atributo
detail=True
para indicar que esta acción debe implementarse de forma individual (es decir, debe aceptar unpk
específico en la URL de la solicitud).Además, hemos especificado algunos atributos personalizados
url_path
yurl_name
para personalizar el punto final de la URL de esta acción. Estos son opcionales y pueden omitirse si no los necesitas.En general, deberías ser capaz de personalizar estos atributos para que se ajusten a tu caso de uso particular e incorporarlos en una acción personalizada de DRF para tu proyecto de álbumes de fotos.