Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

195
Visualizações
django orm último grupo de elementos por cada clave externa

Tenemos los siguientes modelos:

 class Publisher(models.Model): name = models.CharField(max_length=32) local_name = models.CharField(max_length=32) url_pattern = models.CharField(max_length=128) enabled = models.BooleanField(default=True) home_page = models.BooleanField(default=False) category = models.ForeignKey(NewspaperCategory, null=True) class Newspaper(models.Model): class Meta: unique_together = ("publisher", "date") ordering = ("-date",) publisher = models.ForeignKey(Publisher) image = models.ImageField(upload_to=newspaper_upload_to) thumbnail = models.ImageField(upload_to=newspaper_thumbnail_upload_to) date = models.DateField()

Tengo un APIView (marco de descanso de Django) y hay varios parámetros de consulta diferentes que filtran la salida de la API. Me gustaría tener un parámetro de consulta "más reciente" que enumere solo la última versión de cada editor. Además, necesito poder filtrar y dividir más ese QuerySet antes de evaluarlo.

Pero el resultado de la consulta debería ser que las instancias del periódico no se dict para que pueda enviarlas a mi serializador. Mi vista se ve así en este momento:

 class Newspapers(APIView): def get(self, request): queryset = models.Newspaper.objects.filter(deleted=False).prefetch_related('publisher') if "latest" in request.GET: # doing something here with queryset if "publisher_id" in request.GET: queryset = queryset.filter(publisher_id=request.GET['publisher_id']) if "category" in request.GET: queryset = queryset.filter(publisher__category_id=request.GET['category']) if "before" in request.GET: queryset = queryset.filter(date__lt=request.GET['before']) if "after" in request.GET: queryset = queryset.filter(date__gte=request.GET['after']) if "home_page" in request.GET: queryset = queryset.filter(publisher__home_page=request.GET['home_page'].lower() == 'true') queryset = queryset.order_by('-date', 'publisher__order') return PagingResponse( request, serializers.NewspaperVersionSerializer, query=queryset, identifier_name='date' )
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Podemos hacer esto con dos consultas:

 if "latest" in request.GET: latest_ids = list( # <-- first query queryset.order_by('id') .values('publisher_id') .annotate(id=Max('id')) .values_list('id', flat=True) ) queryset = queryset.filter(id__in=latest_ids) # <-- second query

la primera consulta obtiene una lista del último grupo de periódicos por editor, y la segunda consulta obtiene un conjunto de consultas de esos periódicos para filtrar, dividir y...

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda