Wie konvertiert man ein Django-Modellobjekt in ein Wörterbuch mit allen Feldern, einschließlich Fremdschlüsseln und „editable=False'-Feldern?

Susan Sarandon
Freigeben: 2024-10-30 08:30:27
Original
466 Leute haben es durchsucht

How do you convert a Django Model object to a dictionary with all fields, including foreign keys and `editable=False` fields?

Django-Modellobjekte in Wörterbücher mit allen Feldern konvertieren

Problem

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?

Lösung

Es gibt mehrere Methoden, um dies zu erreichen:

1. Verwendung von example.__dict__

instance.__dict__
Nach dem Login kopieren

Dieser Ansatz umfasst jedoch irrelevante Attribute und möglicherweise keine Viele-zu-Viele-Beziehungen.

2. Verwenden von model_to_dict

from django.forms.models import model_to_dict
model_to_dict(instance)
Nach dem Login kopieren

Diese Methode erfasst Viele-zu-Viele-Beziehungen, schließt jedoch nicht bearbeitbare Felder aus.

3. Benutzerdefinierte Funktion

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
Nach dem Login kopieren

Diese Funktion ruft alle Felder ab, einschließlich Fremdschlüssel-IDs und Viele-zu-Viele-Beziehungen.

4. Modellserialisierer

from rest_framework import serializers
class SomeModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = SomeModel
        fields = "__all__"

SomeModelSerializer(instance).data
Nach dem Login kopieren

Modellserialisierer bieten eine umfassende Darstellung, geben Datum/Uhrzeit-Objekte jedoch möglicherweise nicht immer genau zurück.

5. Druckbares Modell

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage