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

149
Visualizações
Reuse a Django_filter for multiple models

I have a very basic filter setup (using django-filter) which allows me to query my data from my django rest api using date ranges:

/api/v2/metrics/?date=2017-01-01
/api/v2/metrics/?start=2017-03-03&end=2017-04-01
/api/v2/metrics/?start=2017-03-03
etc.

My filters look something like this:

class DateFilter(filters.FilterSet):
start = filters.DateFilter(name='date', lookup_expr='gte')
end = filters.DateFilter(name='date', lookup_expr='lte')
    class Meta:
        model = GaData
        fields = ['date']

And my API view sets are:

class GaDataViewSet(viewsets.ModelViewSet):
    queryset = GaData.objects.all()
    serializer_class = GaDataSerializer
    filter_class = DateFilter

    def get_queryset(self): # This returns metrics only for the logged in user
        user_id = self.request.user.id
        return GaData.objects.filter(owner=user_id)

class CountriesViewSet(viewsets.ModelViewSet):
    queryset = GaCountries.objects.all()
    serializer_class = GaCountriesSerializer

    def get_queryset(self): # This returns metrics only for the logged in user
        user_id = self.request.user.id
        return GaData.objects.filter(owner=user_id)

Now, the DateFilter is linked to the GaData model, I could re-write an identical filter and link it to my other model (GaCountries) but I think that there must be a better way, so that I don't need to write the same piece of code for each model.

How can I use a filter for multiple models, or can I simply somehow overwrite the model?

Thanks

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

I usually create a base filter class for these situations

class BaseDateFilter(filters.FilterSet):
    start = filters.DateFilter(name='date', lookup_expr='gte')
    end = filters.DateFilter(name='date', lookup_expr='lte')

class GaDataFilter(BaseDateFilter):
    class Meta:
        model = GaData

class GaCountriesFilter(BaseDateFilter):
    class Meta:
        model = GaCountries      
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