문제

Django 모델의 전체 모듈 경로가 없으면 다음과 같은 작업을 수행 할 수 있습니다.

model = 'User' [in Django namespace]
model.objects.all()

...와 달리 :

User.objects.all().

편집 : 명령 줄 입력을 기반 으로이 호출을하려고합니다. 가져 오기 진술을 피할 수 있습니까?

model = django.authx.models.User

Django가 없으면 오류를 반환합니다.

"global name django is not defined."
도움이 되었습니까?

해결책

나는 당신이 이것을 찾고 있다고 생각합니다 :

from django.db.models.loading import get_model
model = get_model('app_name', 'model_name')

물론 다른 방법이 있지만 네임 스페이스로 가져와야 할 모델 파일을 모르는 경우 처리 방법입니다. (모든 앱의 앱을 알지 못하고 모델을 안전하게 알 수있는 방법이 없습니다. 모든 앱의 모델을 반복 할 때 행운을 테스트하려면 소스 코드를로드로보십시오.)

Django 1.7+의 업데이트 : Django에 따르면 감가 상각 타임 라인, django.db.models.loading Django 1.7에서는 더 이상 사용되지 않았으며 Django 1.9에서 제거됩니다. 지적한대로 Alasdair의 대답, django 1.7+에는 an이 있습니다 응용 프로그램 레지스트리. 당신은 사용할 수 있습니다 apps.get_model 모델을 동적으로 얻는 방법 :

from django.apps import apps
MyModel = apps.get_model('app_label', 'MyModel')

다른 팁

Django 1.7+의 경우, 응용 프로그램 레지스트리. 당신은 사용할 수 있습니다 apps.get_model 메소드 모델을 동적으로 얻는 방법.

from django.apps import apps
MyModel = apps.get_model('app_label', 'MyModel')
from django.authx.models import User
model = User
model.objects.all()

model = django.authx.models.user

? Django는 "글로벌 이름 Django가 정의되지 않았습니다"라는 오류를 반환합니다.

장고는 오류를 반환하지 않습니다. 파이썬은 그렇습니다.

먼저 모델을 가져와야합니다. 당신은 그것을 가져와야합니다

from django.authx.models import User

둘째, 오류가 발생하면 django 정의되지 않으면 Django가 올바르게 설치되지 않습니다. 당신은 당신에게 django가 있어야합니다 PYTHONPATH 또는 Python Lib/Site-Packages에 설치되었습니다.

Django를 올바르게 설치하려면 참조하십시오 http://docs.djangoproject.com/en/dev/intro/install/#intro-install

클래스는 파이썬의 "일등석"객체이며, 이는 다른 모든 객체와 마찬가지로 주변을 통과하고 조작 할 수 있습니다.

모델은 클래스입니다. 클래스 문을 사용하여 새 모델을 생성한다는 사실에서 알 수 있습니다.

class Person(models.Model):
    last_name = models.CharField(max_length=64)

class AnthropomorphicBear(models.Model):
    last_name = models.CharField(max_length=64)

둘 다 Person 그리고 AnthropomorphicBear 식별자는 Django 클래스에 묶여 있으므로 통과 할 수 있습니다. 모델 수준에서 작동하는 헬퍼 기능을 만들고 공통 인터페이스를 공유하려는 경우 유용 할 수 있습니다.

def print_obj_by_last_name(model, last_name):
    model_name = model.__name__
    matches = model.objects.filter(last_name=last_name).all()
    print('{0}: {1!r}'.format(model_name, matches))

그래서 print_obj_by_last_name 둘 중 하나와 함께 작동합니다 Person 또는 AnthropomorphicBear 모델. 그렇게 모델을 전달하십시오.

print_obj_by_last_name(model=Person, last_name='Dole')
print_obj_by_last_name(model=AnthropomorphicBear, last_name='Fozzy')

모델 이름이 문자열로 전달 된 경우 한 가지 방법이 될 수 있다고 생각합니다.

modelname = "User"
model = globals()[modelname]

그러나 Globals ()에 대한 멍청이는 일부 상황에서 약간 위험 할 수 있습니다. 그러니 조심스럽게 처리하십시오 :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top