2010-06-22 25 views
1

J'ai un django.contrib.contenttypes.generic.genericForeignKeyField en tant que membre de mon modèle,membre de classe Django models.Model ne figurant pas dans model_instance._meta.fields

cependant, il n'apparaît pas quand j'instancier les modéliser et ensuite essayer de sortir les champs de la _meta de l'objet.

par exemple:

class A(models.Model): 
    field2 = models.IntegerField(...) 
    field1 = generic.genericForeignKeyField() 

a = A() 
a._meta.fields ---> this does not show field1, but shows field2. 

Quelqu'un peut-il s'il vous plaît me dire pourquoi?

Merci!

Répondre

1

Vous ne configurez pas correctement la relation générique. Lire la documentation:

Il y a trois parties à la mise en place d'un GenericForeignKey:

  1. Donnez à votre modèle un ForeignKey-ContentType.
  2. Attribuez à votre modèle un champ pouvant stocker une valeur de clé primaire à partir des modèles auxquels vous allez vous connecter. (Pour la plupart des modèles, cela signifie IntegerField ou PositiveIntegerField.)
    Ce champ doit être du même type que la clé primaire des modèles qui seront impliqués dans la relation générique. Par exemple, si vous utilisez IntegerField, vous ne pourrez pas créer de relation générique avec un modèle utilisant un champ CharField comme clé primaire.
  3. Donnez à votre modèle un GenericForeignKey et transmettez-lui les noms des deux champs décrits ci-dessus. Si ces champs sont nommés "content_type" et "object_id", vous pouvez omettre ceci - ce sont les noms de champs par défaut que recherchera GenericForeignKey.

En fin de compte, il doit y avoir quelque chose comme:

content_type = models.ForeignKey(ContentType) 
object_id = models.PositiveIntegerField() 
content_object = generic.GenericForeignKey('content_type', 'object_id') 
1

Pourquoi voudriez-vous attendre à? Ce n'est pas un vrai domaine. Il s'agit d'un champ virtuel calculé à l'aide des zones (réelles) content_type et object_id du modèle. Vous pouvez cependant le voir dans a._meta.virtual_fields.