How can I obtain the model's name or the content type of a Django object?

后端 未结 2 686
遇见更好的自我
遇见更好的自我 2021-02-11 12:41

Let\'s say I am in the save code. How can I obtain the model\'s name or the content type of the object, and use it?

from django.db import models

class Foo(model         


        
2条回答
  •  生来不讨喜
    2021-02-11 13:05

    The method get_for_model does some fancy stuff, but there are some cases when it's better to not use that fancy stuff. In particular, say you wanted to filter a model that linked to ContentType, maybe via a generic foreign key?? The question here was what to use for model_name in:

    content_type = ContentType.objects.get(model=model_name)

    Use Foo._meta.model_name, or if you have a Foo object, then obj._meta.model_name is what you're looking for. Then, you can do things like

    Bar.objects.filter(content_type__model=Foo._meta.model_name)
    

    This is an efficient way to filter the Bar table to return you objects which link to the Foo content type via a field named content_type.

提交回复
热议问题