>

django와 django rest framework에서 프로젝트를 만들고 있습니다. 각도 앱의 API입니다. 데이터베이스 설정은 여러 데이터베이스로 구성됩니다. 하나는 기본 데이터베이스이고 모든 장고 테이블은이 데이터베이스에 있습니다. 나머지 데이터베이스는 사용자 유형에 속하며 각 사용자에게는 별도의 데이터베이스가 있어야합니다. 따라서 모든 사용자 관련 데이터는 별도의 데이터베이스로 이동합니다. 선택 데이터베이스를 동적으로 구현하기 위해 사용자 객체에는 쓸 데이터베이스를 저장할 추가 필드가 있습니다.

from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
    """Custom User model."""
    database= models.CharField(max_length=9)

이러한 이유는 각 데이터베이스가 분리되어 있으므로 데이터가 하나의 데이터베이스에만 저장된 경우보다 ListView와 DetailView가 더 빠르게 작동하기 때문에 성능이 향상되었다는 것입니다.

모델 매니저에서 using 메소드를 사용하여 저장할 데이터베이스를 선택할 수 있다는 것을 알고 있습니다. 나머지 API에서는 제대로 작동하고 데이터가 별도의 데이터베이스에 저장되고 있지만 장고가 정의한 메소드를 재정의합니다. 프로젝트에 개발 비용을 추가합니다. 외래 키 및 ManytoMany 키는 사용자의 현재 데이터베이스를 사용하여 해결해야합니다. 데이터베이스 설정을 사용자 정의한 경우에는 발생하지 않습니다. 또한 내 코드는 수년 동안 장고를 작성 했으므로 그들의 코드 : p만큼 좋지 않습니다.

이미 많은 쿼리 세트를 이미 덮어 썼지 만 django는 여전히 기본 데이터베이스를 여러 번 사용합니다. django 모델의 모델 관리자에서 요청 객체를 사용하여 요청별로 기본 데이터베이스를 교환 할 수 있다면 상황이 다를 것이라고 생각합니다.

내 질문은-

<올>
  • 모델 관리자에서 요청 객체에 액세스 할 수있는 방법이 있습니까? 아래 코드의 효과에 영향을 줄 수 있습니다.

    클래스 CustomManager (models.Manager) :

    def get_queryset(self, request):
        return super(CustomManager, self).using(request.user.database).get_queryset()
    
    

  • Model Manager에는 데이터베이스를 선택하는 데 사용할 수있는 _db 속성이 있습니다. 재정의하는 것이 좋습니다? 그렇다면 코드의 방법과 위치는 무엇입니까?

  • 별도의 데이터베이스를 구현하는 더 좋은 방법이 있습니까?
  • 미리 감사합니다.

    안녕하세요

    • 답변 # 1

      Django 문서에서는 데이터베이스 라우터를 사용하는 것이 좋지만 문제는 모델 클래스에만 액세스한다는 것입니다.

      데이터베이스를 동적으로 전환하는 문제와 관련된 몇 가지 질문이 있습니다. 이 게시물에는 request.user 를 통과하는 문제를 해결하는 솔루션이 있습니다.  또는 threading.local 를 사용하여 다른 매개 변수  인스턴스.

      누군가도 이것을 위해 재사용 가능한 플러그인을 만들었습니다-https://github.com/ambitioninc/django-dynamic-db-router

      도움이됩니다.

    관련 자료

  • 이전 build - xcode - 폴더의 모든 파일을 대상에 자동 추가
  • 다음 php - 워드 프레스 퍼머 링크 문제 "로그인"을 permalink로 설정할 수 없습니다 이 페이지에 "페이지를 찾을 수 없음"메시지가 표시되는 URL