Bagaimanakah anda menukar objek Model Django kepada kamus yang merangkumi kesemuanya medan, termasuk kunci asing dan medan yang ditandakan sebagai boleh diedit=False?
Terdapat beberapa kaedah untuk mencapai ini:
instance.__dict__
Walau bagaimanapun, pendekatan ini termasuk atribut yang tidak berkaitan dan mungkin tidak termasuk perhubungan banyak-ke-banyak.
from django.forms.models import model_to_dict model_to_dict(instance)
Kaedah ini menangkap perhubungan banyak-ke-banyak tetapi mengecualikan medan yang tidak boleh diedit.
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
Fungsi ini mendapatkan semula semua medan, termasuk id kunci asing dan perhubungan banyak-ke-banyak.
from rest_framework import serializers class SomeModelSerializer(serializers.ModelSerializer): class Meta: model = SomeModel fields = "__all__" SomeModelSerializer(instance).data
Pensiri model menyediakan perwakilan yang komprehensif, tetapi mungkin tidak selalu mengembalikan objek masa tarikh dengan tepat.
Untuk meningkatkan perwakilan model dalam konsol, tentukan kelas model asas:
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
Warisi daripada model asas ini untuk mencetak kamus secara automatik dan bukannya perwakilan model lalai.
Atas ialah kandungan terperinci Bagaimanakah anda menukar objek Model Django kepada kamus dengan semua medan, termasuk kunci asing dan medan `editable=False`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!