How to get the app a Django model is from?

后端 未结 3 1978
既然无缘
既然无缘 2021-01-01 09:47

I have a model with a generic relation:

TrackedItem --- genericrelation ---> any model

I would like to be able to generically get, from

相关标签:
3条回答
  • 2021-01-01 09:53

    The app_label is available as an attribute on the _meta attribute of any model.

    from django.contrib.auth.models import User
    print User._meta.app_label
    # The object name is also available
    print User._meta.object_name
    
    0 讨论(0)
  • You don't need to get the app or model just to get the contenttype - there's a handy method to do just that:

    from django.contrib.contenttypes.models import ContentType
    
    ContentType.objects.get_for_model(myobject)
    

    Despite the name, it works for both model classes and instances.

    0 讨论(0)
  • 2021-01-01 10:13

    You can get both app_label and model from your object using the built-in ContentType class:

    from django.contrib.contenttypes.models import ContentType
    from django.contrib.auth.models import User
    
    user_obj = User.objects.create()
    obj_content_type = ContentType.objects.get_for_model(user_obj)
    
    print(obj_content_type.app_label)
    # u'auth'
    print(obj_content_type.model)
    # u'user'
    

    This is better approach respect of using the _meta properties that are defined for private purposes.

    0 讨论(0)
提交回复
热议问题