Comment convertir un objet du modèle Django en un dictionnaire qui inclut tous ses champs, y compris les clés étrangères et les champs marqués comme editable=False?
Il existe plusieurs méthodes pour y parvenir :
instance.__dict__
Cependant, cette approche inclut des attributs non pertinents et peut ne pas inclure de relations plusieurs-à-plusieurs.
from django.forms.models import model_to_dict model_to_dict(instance)
Cette méthode capture les relations plusieurs-à-plusieurs mais exclut les champs non modifiables.
from itertools import chain def to_dict(instance): opts = instance._meta data = {} for f in chain(opts.concrete_fields, opts.private_fields): data[f.name] = f.value_from_object(instance) for f in opts.many_to_many: data[f.name] = [i.id for i in f.value_from_object(instance)] return data
Cette fonction récupère tous les champs, y compris les identifiants de clé étrangère et les relations plusieurs-à-plusieurs.
from rest_framework import serializers class SomeModelSerializer(serializers.ModelSerializer): class Meta: model = SomeModel fields = "__all__" SomeModelSerializer(instance).data
Les sérialiseurs de modèles fournissent une représentation complète, mais ne renvoient pas toujours les objets datetime avec précision.
Pour améliorer la représentation du modèle dans la console, définissez une classe de modèle de base :
from django.db import models from itertools import chain class PrintableModel(models.Model): def __repr__(self): return str(self.to_dict()) def to_dict(instance): # ... (same code as in the Custom Function) class Meta: abstract = True
Héritez de ce modèle de base pour imprimer automatiquement des dictionnaires au lieu des représentations de modèle par défaut.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!