2011-10-02 15 views
19

Come è possibile ottenere un modello di chiave esterna?Django- Get Chiave esterna Modello

Per esempio:

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

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

voglio arrivare categoria Modello In sottocategoria.

Come posso fare?

+0

Che cosa intendi? vuoi ottenere il tipo di classe? –

+0

Desidero esattamente ottenere il tipo di classe senza alcuna istanza. –

risposta

21

Prova:

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

EDIT:

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

Oh ... Allora è molto semplice: sempre Category. –

+0

Mi prendi in giro? È un campione. Voglio ottenere la chiave straniera in modo dinamico! –

+4

'sottocategoria._meta.get_field ('categoria'). Rel.to' –

9

ForeignKeys sono ReverseSingleRelatedObjectDescriptor oggetti. Questo è quello con cui stai veramente lavorando. Lo otterrai se esegui type(SubCategory.category). Da qui è possibile utilizzare due modi per richiamare l'attuale Classe/Modello.

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__ 

Se non si conosce il nome dell'attributo fino run-time, quindi utilizzare getattr(SubCategory, attributeNameVariable) per ottenere il vostro oggetto ReverseSingleRelatedObjectDescriptor per quel campo ForeignKey.

Problemi correlati