Heim > Artikel > Backend-Entwicklung > Wie konvertiert man ein Django-Modellobjekt in ein Wörterbuch mit allen Feldern, einschließlich Fremdschlüsseln und „editable=False“-Feldern?
Wie konvertiert man ein Django-Modellobjekt in ein Wörterbuch, das alle seine Felder enthält? Felder, einschließlich Fremdschlüssel und Felder, die als bearbeitbar = Falsch markiert sind?
Es gibt mehrere Methoden, um dies zu erreichen:
instance.__dict__
Dieser Ansatz umfasst jedoch irrelevante Attribute und möglicherweise keine Viele-zu-Viele-Beziehungen.
from django.forms.models import model_to_dict model_to_dict(instance)
Diese Methode erfasst Viele-zu-Viele-Beziehungen, schließt jedoch nicht bearbeitbare Felder aus.
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
Diese Funktion ruft alle Felder ab, einschließlich Fremdschlüssel-IDs und Viele-zu-Viele-Beziehungen.
from rest_framework import serializers class SomeModelSerializer(serializers.ModelSerializer): class Meta: model = SomeModel fields = "__all__" SomeModelSerializer(instance).data
Modellserialisierer bieten eine umfassende Darstellung, geben Datum/Uhrzeit-Objekte jedoch möglicherweise nicht immer genau zurück.
Um die Modelldarstellung in der Konsole zu verbessern, definieren Sie eine Basismodellklasse:
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
Erben Sie von diesem Basismodell, um automatisch Wörterbücher anstelle von Standardmodelldarstellungen zu drucken.
Das obige ist der detaillierte Inhalt vonWie konvertiert man ein Django-Modellobjekt in ein Wörterbuch mit allen Feldern, einschließlich Fremdschlüsseln und „editable=False“-Feldern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!