Disons que je suis dans le code de sauvegarde. Comment puis-je obtenir le nom du modèle ou le type de contenu de l'objet et l'utiliser?
from Django.db import models
class Foo(models.Model):
...
def save(self):
I am here....I want to obtain the model_name or the content type of the object
Ce code fonctionne, mais je dois connaître le nom_modèle:
import Django.db.models
from Django.contrib.contenttypes.models import ContentType
content_type = ContentType.objects.get(model=model_name)
model = content_type.model_class()
Vous pouvez obtenir le nom du modèle de l'objet comme ceci:
self.__class__.__name__
Si vous préférez le type de contenu, vous devriez pouvoir l'obtenir comme ceci:
ContentType.objects.get_for_model(self)
La méthode get_for_model
fait des trucs de fantaisie, mais il y a des cas où il vaut mieux ne pas utiliser ces trucs de fantaisie. Supposons en particulier que vous vouliez filtrer un modèle lié à ContentType, peut-être via une clé étrangère générique ?? La question ici était de savoir quoi utiliser pour model_name
dans:
content_type = ContentType.objects.get (model = model_name)
Utilisation Foo._meta.model_name
, ou si vous avez un objet Foo
, alors obj._meta.model_name
est ce que vous recherchez. Ensuite, vous pouvez faire des choses comme
Bar.objects.filter(content_type__model=Foo._meta.model_name)
C'est un moyen efficace de filtrer la table Bar
pour vous renvoyer des objets qui sont liés au type de contenu Foo
via un champ nommé content_type
.