8
votes

Comment dire quels champs ont été différés / seulement dans un requérant Django

J'essaie de sérialiser un queryset dans JSON en utilisant mon itérateur personnalisé. Sur les modèles, je détecte les champs du modèle et insérez-les dans la dicte JSON comme en avez besoin d'eux.

J'ai du mal à déterminer comment déterminer quels champs ont été différés dans le modèle à l'aide de la fonction de diffusion ou de queryset uniquement.

Y a-t-il un moyen et comment savoir quels champs sont différés et comment sauter sur eux?


1 commentaires

Avez-vous une idée de la manière dont vous obtenez cette liste pour une instance de modèle résultante? Quelque part dans l'instance modèle._meta ?? : S


3 Réponses :


10
votes

Un peu enterré ...

QuerySet.Query.get_Loaded_field_Names ()


0 commentaires

7
votes

Voici comment vous pouvez vérifier s'il est différé pour une instance de modèle réelle: xxx

de cette façon, il ne chargera pas ce champ de DB. Cette mise en œuvre est effectivement prise de Django. https://github.com/django/django/blob/master/ django / db / modèles / base.py # l415


0 commentaires

10
votes

La version actuelle de Django (1.9) a une méthode sur toutes les instances de modèle: instance.get_deferred_fields ()

Cela semble être la mise en œuvre "officielle" de la réponse d'Alexey.


0 commentaires