Bagaimanakah anda menukar objek Model Django kepada kamus dengan semua medan, termasuk kunci asing dan medan `editable=False`?

Susan Sarandon
Lepaskan: 2024-10-30 08:30:27
asal
372 orang telah melayarinya

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

Tukar Objek Model Django kepada Kamus dengan Semua Medan

Masalah

Bagaimanakah anda menukar objek Model Django kepada kamus yang merangkumi kesemuanya medan, termasuk kunci asing dan medan yang ditandakan sebagai boleh diedit=False?

Penyelesaian

Terdapat beberapa kaedah untuk mencapai ini:

1. Menggunakan instance.__dict__

instance.__dict__
Salin selepas log masuk

Walau bagaimanapun, pendekatan ini termasuk atribut yang tidak berkaitan dan mungkin tidak termasuk perhubungan banyak-ke-banyak.

2. Menggunakan model_to_dict

from django.forms.models import model_to_dict
model_to_dict(instance)
Salin selepas log masuk

Kaedah ini menangkap perhubungan banyak-ke-banyak tetapi mengecualikan medan yang tidak boleh diedit.

3. Fungsi Tersuai

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
Salin selepas log masuk

Fungsi ini mendapatkan semula semua medan, termasuk id kunci asing dan perhubungan banyak-ke-banyak.

4. Pensiri Model

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

SomeModelSerializer(instance).data
Salin selepas log masuk

Pensiri model menyediakan perwakilan yang komprehensif, tetapi mungkin tidak selalu mengembalikan objek masa tarikh dengan tepat.

5. Model Boleh Cetak

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!