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
관련 자료
- mysql - 더 효율적인 데이터베이스 모델
- python - Django Model Form이 데이터베이스에 데이터를 저장하지 않지만 개체가 생성됨
- 기본 사용자가 클릭 하우스에서 데이터베이스를 보는 것을 금지하는 방법은 무엇입니까?
- DJANGO - django - 모델의 기본 필터
- postgresql - 차량 데이터베이스 설계 - 유형, 제조사, 모델, 차량
- c# - aspnet core mvc의 데이터베이스에서 내 모델을 업데이트 할 수 없습니다
- sql server - 기본 전체 백업 모델과 통제 불능 로그 파일을 가진 고전적인 바보 -— 어떻게 이것을 통제 할 수 있습니까?
- javascript - React-three-fiber에서 GLTF 모델의 재료를 동적으로 편집
- sql - Java 메소드를 호출하여 H2 데이터베이스의 새 행에 대한 기본값 생성
- html - PHP를 사용하여 한 페이지에서 다른 페이지로 데이터베이스 값을 동적으로 전달하는 방법은 무엇입니까?
- laravel - 데이터베이스에 클래스를 시드하는 것이 모델 뮤 테이터에 의해 처리되지 않는 이유는 무엇입니까?
- 새 레코드를 만들 때 Rails 모델 기본값이 무시됩니까?
- python - 데이터베이스 관리자에서 중복 양식을 수정하는 방법은 무엇입니까?
- c# - 동적으로 생성 된 모델에서 DataGrid에 버튼을 표시하는 방법은 무엇입니까?
- android - 주문 세부 사항을 저장하는 관계형 데이터베이스를 모델링하는 방법은 무엇입니까?
- postgresql - 데이터베이스 관리자를 사용하여 데이터베이스 백업이 작동하지 않습니다
- reactjs : Django Rest ManyToMany 필드에 POST 요청에 반응
- Django에서 확장 사용자 모델 직렬화
- python : 중첩된 직렬 변환기의 FileField는 업데이트될 때 "제출된 데이터가 파일이 아닙니다. 양식의 인코딩 유형을 확인하십시오."라는 오류가 발생했을 때 경로를 보유하고 있습니다.
- Django Rest Framework의 함수 내에서 함수 이름 호출
- python : django rest 프레임워크의 AbstractUser 모델에서 사용자 정의 부울 필드를 직렬화할 수 없습니다.
- Django REST 프레임워크 일반 보기 대 사용자 정의 함수 기반 보기
- django rest 프레임워크에서 google 및 facebook oauth2를 구현하는 방법은 무엇입니까?
- django : TypeError: 'facebook_reactions' 필드에 숫자가 필요하지만
가 있습니다. - ModelSerializer에서 생성 및 업데이트 모두에서 함수를 호출할 수 있습니까?
- python : Django DRF -API가 인터페이스 대신 json 형식을 표시합니다.
Django 문서에서는 데이터베이스 라우터를 사용하는 것이 좋지만 문제는 모델 클래스에만 액세스한다는 것입니다.
데이터베이스를 동적으로 전환하는 문제와 관련된 몇 가지 질문이 있습니다. 이 게시물에는
request.user
를 통과하는 문제를 해결하는 솔루션이 있습니다. 또는threading.local
를 사용하여 다른 매개 변수 인스턴스.누군가도 이것을 위해 재사용 가능한 플러그인을 만들었습니다-https://github.com/ambitioninc/django-dynamic-db-router
도움이됩니다.