In Django Rest Framework, come si filtra un serializzatore quando è annidato in un altro serializzatore?Come si filtra un serializzatore nidificato in Django Rest Framework?
I filtri vengono imposti negli viewet DRF, ma quando si chiama un serializzatore da un altro serializzatore, il set di viste del serializzatore nidificato non viene mai chiamato, quindi i risultati nidificati non vengono visualizzati.
Ho provato ad aggiungere un filtro sul gruppo di viste di origine, ma non sembra filtrare i risultati nidificati perché i risultati nidificati vengono richiamati come una query pre-scaricata separata. (Il serializzatore nidificato è una ricerca inversa, vedi.)
E 'possibile aggiungere un get_queryset() override nel serializzatore annidato stesso (spostandolo fuori dal viewet), per aggiungere il filtro lì? Ci ho provato anch'io, senza fortuna.
Questo è quello che ho provato, ma non sembra nemmeno di ottenere chiamato:
class QuestionnaireSerializer(serializers.ModelSerializer):
edition = EditionSerializer(read_only=True)
company = serializers.StringRelatedField(read_only=True)
class Meta:
model = Questionnaire
def get_queryset(self):
query = super(QuestionnaireSerializer, self).get_queryset(instance)
if not self.request.user.is_staff:
query = query.filter(user=self.request.user, edition__hide=False)
return query
Qualsiasi aiuto apprezzato
John
'get_queryset' è una classe su' ModelViewSet', non sul Serializer, motivo per cui non viene chiamato – Simon