다음 코드는 사용자 지정 관리자를 모델에 추가하는 TranslatedContent 클래스의 일부입니다.Django는 런타임에 사용자 정의 관리자를 확장합니다. 믹스 인 스타일?
if hasattr(cls, 'objects'):
if cls.objects.__class__ == models.Manager:
# default manager, override
cls.add_to_class('objects', TranslationManager()
else:
# there is a custom manager, don't override
cls.add_to_class('translated', TranslationManager())
사용자 정의 관리자가 이미있는 경우 관리자에 대해 다른 이름을 사용합니다. (이 경우 '번역 된') 그것은 내가 원하는 것이 아닙니다.
어떻게 동일한 이름 ('objects')을 사용하고 TranslationManager()로 덮어 쓸 수 있습니까? 덮어 쓰기 대신 대체/연장이됩니다. 원래 관리자와 TranslationManager
사이에 발생할 수있는 특정 충돌, 네임 스페이스에 대해 매우 신중해야 할 필요가
if hasattr(cls, 'objects'):
if cls.objects.__class__ == models.Manager:
# default manager, override
cls.add_to_class('objects', TranslationManager()
else:
# there is a custom manager, don't override
class CombinedManager(cls.objects.__class__, TranslationManager):
pass
cls.add_to_class('objects', CombinedManager())
그러나 :
감사합니다. 그렇습니다. 문서 옵션을 사용하겠습니다. 맞춤 관리자가있는 경우 경고를 표시하는 것이 '완료되지 않았습니까?' –
그것은 논쟁의 여지가 있습니다. 만약 당신이'TranslationManager'를 사용할 필요가 있고, 기본적으로 경고를 경고문으로 사용하는 것만 큼 중요하다면 (예를 들어 그들이 무시한 경우, 그들이 잊어 버린 이유는 그들이 선택하지 않았기 때문이 아닙니다. ~), 경고가 적절할 수 있습니다. 그렇지 않으면 혼자있는 것이 가장 좋습니다. –