다중 테넌트 애플리케이션을 설계할 때 사용자에게 자신의 사용자 정의 데이터 필드를 정의할 수 있는 기능을 제공하는 것이 종종 바람직합니다. . 그러나 관계형 데이터베이스에서 동적 필드를 만들고 관리하는 것은 복잡할 수 있습니다. 이 문서에서는 Django에서 이 문제를 해결하기 위한 다양한 접근 방식을 살펴봅니다.
현재 여러 번성하는 포크에서 유지 관리되는 django-eav 패키지는 엔터티-속성-값 패턴을 구현합니다. 몇 가지 간단한 Django 모델에 동적 속성을 저장함으로써 이 솔루션은 다음을 제공합니다.
그러나 잠재적인 성능 및 유지 관리 문제가 있습니다.
PostgreSQL은 다음을 포함하여 동적 데이터를 저장하기 위한 여러 데이터 유형을 제공합니다.
이 필드는 색인화된 쿼리를 허용하며 다음과 같이 사용할 수 있습니다.
class Something(models.Model): data = JSONField(db_index=True) # JSON or JSONB something = Something.objects.create(data={'a': 1, 'b': 2}) Something.objects.filter(data__a=1)
또는 Django MongoDB는 완전히 동적 모델링 솔루션을 제공합니다. 내장된 문서 및 모델 목록.
from djangotoolbox.fields import DictField class Image(models.Model): exif = DictField() image = Image.objects.create(exif=get_exif_data(...))
Django-mutant는 Michael Hall의 접근 방식에서 영감을 받아 동적 외래 키와 다대다 필드를 제공합니다. Django South 후크를 활용하여 런타임 시 데이터베이스 스키마를 동적으로 변경하여 완전히 동적인 Django 앱, 모델 및 필드를 허용합니다.
from dynamo import models test = models.DynamicModel.objects.create(name='Test') foo = models.DynamicModelField.objects.create(model=test, name='foo')
이러한 동적 접근 방식을 사용할 때 잠재적인 안정성 위험과 잠금 고려 사항에 유의하는 것이 중요합니다. . 그러나 Django에서 동적 데이터를 관리하기 위한 강력한 옵션을 제공합니다.
위 내용은 다중 테넌트 애플리케이션을 위한 동적 Django 모델 필드를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!