Django 모델 객체를 외래 키와 `editable=False` 필드를 포함한 모든 필드가 있는 사전으로 어떻게 변환합니까?

Susan Sarandon
풀어 주다: 2024-10-30 08:30:27
원래의
373명이 탐색했습니다.

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

Django 모델 개체를 모든 필드가 포함된 사전으로 변환

문제

Django 모델 개체를 해당 필드가 모두 포함된 사전으로 어떻게 변환합니까? 편집 가능으로 표시된 필드 및 외래 키를 포함한 필드=False?

해결 방법

이를 달성하는 방법에는 여러 가지가 있습니다.

1. instance.__dict__ 사용

instance.__dict__
로그인 후 복사

그러나 이 접근 방식에는 관련 없는 속성이 포함되어 있으며 다대다 관계가 포함되지 않을 수 있습니다.

2. model_to_dict 사용

from django.forms.models import model_to_dict
model_to_dict(instance)
로그인 후 복사

이 방법은 다대다 관계를 캡처하지만 편집할 수 없는 필드는 제외합니다.

3. 사용자 정의 함수

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
로그인 후 복사

이 함수는 외래 키 ID 및 다대다 관계를 포함한 모든 필드를 검색합니다.

4. 모델 직렬 변환기

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

SomeModelSerializer(instance).data
로그인 후 복사

모델 직렬 변환기는 포괄적인 표현을 제공하지만 날짜/시간 객체를 항상 정확하게 반환하는 것은 아닙니다.

5. 인쇄 가능한 모델

콘솔에서 모델 표현을 향상하려면 기본 모델 클래스를 정의하세요.

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
로그인 후 복사

이 기본 모델에서 상속하여 기본 모델 표현 대신 사전을 자동으로 인쇄합니다.

위 내용은 Django 모델 객체를 외래 키와 `editable=False` 필드를 포함한 모든 필드가 있는 사전으로 어떻게 변환합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!