2012-11-16 21 views
24

Django'da, her modelin, birincil anahtar olarak bildirilen alana işaret eden sözde özniteliği pk vardır. Hiç saha primer olarak ilanı halinde bu modelde Django modelinin birincil alanının adını alın

class TestModel(models.Model): 
    payload = models.Charfield(max_length=200) 

, pk nitelik o oluşturulur, örtük id alana işaret eder.

Bu modelde
class CustomPK(models.Model) 
    primary = models.CharField(max_length=100, primary=True) 
    payload = models.Charfield(max_length=200) 

, pk nitelik açık tanımlanmış birincil anahtar alanı işaret ediyorum primary

Yani, nasıl alanın adını alabilirsiniz benim soru, birincil anahtar mı?

+2

Neden ihtiyacın var? 'pk' her koşulda kullanılabilir. –

+1

Bir veritabanını komut dosyası aracılığıyla diğerine taşımak için buna ihtiyacımız var. – Martin

cevap

29

Ayrıca pk-özniteliği bir nitelik "adı" sahip olacak olması. Bu Alanın adını tutmak gibi görünüyor.

CustomPK._meta.pk.name 

Durumumda, "id" değerini sonuç olarak almalıyım (olması gerektiği gibi). :-)

+3

pk.name sütun adını döndürmez, "_id" postfix'i atlar. (django 1.7 üzerinde test edilmiştir) CustomPK._meta.pk.column kullandım – Oleg

1

Field nesneleri primary_key Özellik

for field in CustomPK._meta.fields: 
    print field.primary_key 
    print field.name 


# True 
# primary 
# False 
# payload 
İlgili konular