2011-10-02 19 views
19

¿Cómo puedo obtener un tipo de modelo de clave externa?Django- Obtener modelo de clave externa

Por ejemplo:

class Category(models.Model): 
    name = models.CharField(max_length = 100) 

class SubCategory(models.Model): 
    category = models.ForeignKey(Category) 
    title = models.CharField(max_length = 100) 

quiero conseguir la categoría de modelo en la subcategoría.

¿Cómo puedo hacerlo?

+0

¿Qué quieres decir? ¿Quieres obtener el tipo de clase? –

+0

I Exactamente, quiero obtener el tipo de clase sin ninguna instancia. –

Respuesta

21

Probar:

subcategory = SubCategory.objects.get(pk=given_pk) 
subcategory.category 

EDIT:

subcategory._meta.get_field('category').rel.to 
+0

Oh ... Entonces es muy simple: siempre Categoría. –

+0

¿Bromeando? Es una muestra. ¡Quiero obtener la clave extranjera dinámicamente! –

+4

'subcategory._meta.get_field ('category'). Rel.to' –

9

ForeignKeys son ReverseSingleRelatedObjectDescriptor objetos. Entonces eso es con lo que realmente estás trabajando. Lo obtendrá si ejecuta type(SubCategory.category). Desde aquí puede usar dos formas de obtener la clase/modelo real al que se hace referencia.

SubCategory.category.field.rel.to # <class 'path.to.Model'> 
SubCategory.category.field.rel.to.__name__ # 'Category' 

# or these will do the same thing 

SubCategory._meta.get_field('category').rel.to 
SubCategory._meta.get_field('category').rel.to.__name__ 

Si usted no sabe el nombre del atributo hasta que en tiempo de ejecución, a continuación, utilizar getattr(SubCategory, attributeNameVariable) para conseguir su objetivo ReverseSingleRelatedObjectDescriptor para ese campo ForeignKey.

Cuestiones relacionadas