0

내 문제는 다음과 같습니다. 잠시 동안 Django 모델의 속성에서 내 응용 프로그램의 몇 가지 (가장 관련성이 높고 재사용 가능한) 쿼리를 캡슐화하는 데 익숙해졌습니다. 나는 항상 좋은 연습으로 간주 한속성에서 쿼리를 캡슐화하기 위해 모델 가져 오기가 순환 가져 오기 문제가 발생했습니다.

from my_app.models import ModelBla 

..... 

class ModelBlehhh(): 
    @property 
    def some_bla_things(self, bla): 
     return ModelBla.objects.filter(.....) 

, 나는 많은 내 응용 프로그램을 통해 그들의 대부분을 사용

이 그렇게, 나는 끊임없이 않습니다.

문제는 대부분 쿼리에 사용되는 이러한 가져 오기가 내 모델의 관계 구조를 방해한다는 의미입니다. 의미 : 순환 가져 오기 문제를 만들지 않고도 쿼리를위한 속성을 만들 수없는 경우가 점점 더 많아지고 있습니다.

제 접근 방법이 맞습니까? 이러한 쿼리를 캡슐화하는 더 좋은 방법이 있습니까? 너는 주로 무엇을하니?

도움 주셔서 감사합니다.

답변

1

왜 가져 오기는 말할 것도없고 속성이 필요한 이유가 표시되지 않습니다.

현재 모델을 기반으로 다른 모델을 필터링하는 경우 해당 모델과 관련이 있어야합니다. 그리고 관계가 있다면, 자동 뒤로 관계를 사용해야합니다. 따라서 SomeOtherModel.objects.filter(blah=self)보다는 self.someothermodel_set.all()을 사용해야합니다.

0
Is there a better way to encapsulate these queries? 

사실, 순환 의존성을 먹지 말고 대신 제거하십시오. 이렇게하면 프로젝트의 나중 단계에서 데이터베이스에 대한 액세스가 증가합니다.이 단계에서만 구조를 다시 정의하여 원형 가져 오기를 제거 할 수 있습니다. 그렇지 않은 경우 리팩토링하고 잘못 수정 한 시점이 너무 늦습니다.

What do you usually do? 

기본적으로 다른 사람이하는 것과는 다릅니다. 귀하의 응용 프로그램의 범위에 따라 다릅니다. 귀하의 응용 프로그램이 장기 애플 리케이션이라면, 당신이하고있는 일이 잘못되었습니다. 모든 코드에서 사용할 수있는 리포지토리 종류를 만들고 코드는 순환 수입없이 필요할 때마다 액세스 할 수 있습니다. 즉, 종속성이 없습니다.