Django:使用延迟查询时获取模型类型

spe*_*ane 4 python django django-models

当您使用defer(...)查询命令时,Django返回与原始模型不同的类.在使用延迟字段时,如何动态获取模型的名称?

在代码中:

obj_nodefer = model_class.objects.filter(title="foo")[0]
model_name = str(type(obj_nodefer)) # Works just fine

obj_defer = model_class.objects.filter(title="foo").defer("content")[0]
model_name = str(type(obj_defer)) # Does't return the right name because of defer above.
Run Code Online (Sandbox Code Playgroud)

我如何从中获取模型的名称obj_defer

小智 5

在延迟类上,您还可以在不__class__.__name__使用以下操作字符串的情况下获取原始类:

obj._meta.concrete_model
'product.models.ProductModelName'

obj._meta.concrete_model._meta.app_label
'product'

obj._meta.concrete_model._meta.model_name
'productmodelname'
Run Code Online (Sandbox Code Playgroud)