ModelViewset no django

0

Pergunta

Eu sou novato de Django Resto-quadro. Eu uso Modelviewset para criar API para o projeto. Eu quero obter a lista de coisa não pela identificação e uso lookup_field para fazer isso. Mas é só voltar 1 objeto. Como posso personalizado para retornar multible objeto?

este é o meu modelo

class Rating(models.Model):
    dayandtime = models.DateTimeField(auto_now_add=True)
    ratingpoint = models.IntegerField(null=True,blank=True)
    ratingcomment = models.TextField(null=True, blank=True)
    img = models.ImageField(upload_to='static',default=None)
    product = models.ForeignKey(Product,on_delete=models.CASCADE)
    user = models.ForeignKey(User,on_delete=models.CASCADE)

Esta é a minha vista

class RatingViewSet(viewsets.ModelViewSet):
    queryset = Rating.objects.all()
    serializer_class = RatingSerializer
    lookup_field = "product"

Este é o meu Serializador

class RatingSerializer(ModelSerializer):
    class Meta:
        model=Rating
        fields=["id","dayandtime","ratingpoint", "ratingcomment","img","product","user"]
        lookup_field = "product" 

Por favor, ajude-me sovle este problema. Muito obrigado

1

Melhor resposta

1

Você deseja usar o filtro na api e o retorno de vários objetos. Mas lookup_field é usado para a execução de objeto de pesquisa individuais de cada modelo de instâncias. Existem muitas maneira de atingir o seu objetivo, mas eu vou mostrar a você filtrar por parâmetros de consulta.

Você pode substituir get_queryset() para lidar com URLs como http://yourdoamin.com/api/ratings?product=1 ( aqui vamos supor que você deseja filtrar por id do produto ).

class RatingViewSet(viewsets.ModelViewSet):
    serializer_class = RatingSerializer

    def get_queryset(self):
        queryset = Rating.objects.all()
        product= self.request.query_params.get('product')
        if product not None:
            queryset = queryset.filter(product_id=product)
        return queryset

Claro, você pode adicionar muitas if/elif/else bloco para lidar com muitos parâmetros de consulta.

Você também pode usar um método semelhante : O SearchFilter classe para atingir o mesmo objetivo.

Mais informações sobre a DRF filtragem de documentação

2021-11-24 10:00:31

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................