2011-10-02 19 views
19

Yabancı Anahtar Model Türü Nasıl Alabilirim? Örnek içinDjango- Yabancı Anahtar Model Al

:

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

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

Ben alt kategorideki kategori Modeli Get İstiyor.

Nasıl Yapabilirim?

+0

Ne demek istiyorsun? sınıf tipini almak ister misin? –

+0

Tam Olarak Herhangi Bir Örnek Olmadan Sınıf Türü Almak İstiyorum. –

cevap

21

Dene:

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

DÜZENLEME:

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

Oh ... O zaman çok basit: her zaman Kategori. –

+0

Şaka mı yapıyorsun? Bu bir örnek. Yabancı Anahtarı Dinamik Olarak Almak İstiyorum! –

+4

'subcategory._meta.get_field ('kategori') rel.to' –

9

ForeignKeys ReverseSingleRelatedObjectDescriptor nesnelerdir. Yani gerçekten çalıştığın şey bu. type(SubCategory.category) çalıştırırsanız alırsınız. Buradan, gerçek Sınıf/Modele başvurmak için iki yol kullanabilirsiniz. Çalıştırmak-saatine kadar özellik adını bilmiyorsanız

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__ 

, o ForeignKey alan için ReverseSingleRelatedObjectDescriptor nesneyi almak için getattr(SubCategory, attributeNameVariable) kullanın.

İlgili konular