update select_related query not example django django-models django-queryset isnull

select_related - Django: filtrado queryset por ''field__isnull=True'' o ''field=None''?



select_related django example (2)

El ORM manejará None (convertirlo a NULL) para usted y devolverá un objeto QuerySet , de modo que a menos que necesite capturar None el primer ejemplo está bien.

>>> User.objects.filter(username=None) [] >>> type(_) <class ''django.db.models.query.QuerySet''> >>> print User.objects.filter(username=None).query SELECT "auth_user"."id", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user" WHERE "auth_user"."username" IS NULL

Tengo que filtrar un conjunto de preguntas por un valor dinámico (que puede ser Ninguno): puedo simplemente escribir:

filtered_queryset = queryset.filter(field=value)

o debo verificar Ninguno:

if value is None: filtered_queryset = queryset.filter(field__isnull=True) else: filtered_queryset = queryset.filter(field=value)

¿El comportamiento depende del DBMS particular?


Prefiero la segunda solución que se maneja mejor

Update

if value is None: filtered_queryset = queryset.filter(field__isnull=True) //Do some proessing with filtered_queryset object with None values else: filtered_queryset = queryset.filter(field=value) //Do some proessing with filtered_queryset object with not NULL values

El conjunto de consultas puede manejar valores nulos. De acuerdo con este User.objects.filter(username=None) esto solo obtendría valores donde username = NULL