2013-04-23 16 views
6

ben "Etkinlik"Django ForeignKey sorunu ile ilgili sınıfı bulunamadı

related_workoutrecord = models.ForeignKey(WorkoutRecord, null=True, blank=True) 

ForeignKey izin alınmalıdır WorkoutRecord denilen bir sınıf ile ilgilidir denilen bir sınıf altında benim Modeli aşağıdaki ForeignKey alan oluşturduk boş. ne olup bittiğini üzerinde

NameError: name 'WorkoutRecord' is not defined 

Herhangi düşünceler: Güneye koştum ve aşağıdaki hata mesajı var bu sütunu ekledikten sonra

? 'WorkoutRecord' modelimin bir sınıfı olduğunu doğruladım.

Ben mesela (tırnak içinde) bir dize olarak WorkoutRecord yazmalı mıyım:

related_workoutrecord = models.ForeignKey('WorkoutRecord', null=True, blank=True) 

Ben geribildirim

+1

Modelinizi gönderir misiniz? Beyanname sırası da WorkoutRecord sınıfı nerede? –

+0

Eğer 'WorkoutRecord' tanımı 'Activity' (kodda) tanımının altındaysa, o zaman evet, bunları tırnak işaretleri arasında yazmalısınız. –

cevap

8

benim yorumum gereğince, sınıf sınıf 'WorkoutRecord' erişebilir 'Etkinlik' emin olun.

Hata, ne dediği anlamına gelir, WorkoutRecord, Etkinlik sınıfınızda tanımlanmamıştır. İlk

Kontrol bu iki nokta:

1) ithal mü

?

2) WorkoutRecord, Activity'dan önce tanımlanmış mıydı?

+1

Mükemmel geri bildirim! WorkoutRecord'un tanımı, Etkinliğin (kodda) tanımı altındaydı, bu yüzden tırnaklar arasında "WorkoutRecord" yazdım. Başka bir seçenek de WorkoutRecord'un altına Etkinlik koymaktı. (Bu durumda siparişin önemli olduğunu bilmiyordum). Tekrar teşekkürler! – bbrooke

+0

db geçişlerini yönetmek için güney kullanıyorum. WorkoutRecord'un her iki model daha önceden db'ye önceden taşınmış olsa bile ve yalnızca ForeignKey alanını yeni bir göçüme eklediğimde bile Activity'den önce neden tanımlanması gerektiğini biliyor musunuz? – Hat

0

Kullanım 'yourapp.Model' biçimi için teşekkür ederiz. Alıntılar ile birlikte.

3

WorkoutRecord sınıfı, sınıf dışı bir referansı tırnak işaretleri olmadan kullanmak için önce (diğer bir deyişle) Aktivite sınıfı olarak tanımlanmalıdır. Sınıflar arasında dairesel referanslar varsa, daha sonra alıntılanan dize sürümünü kullanmak, kodunuzda daha sonra tanımlanan sınıf için tembel bir başvuru almak için çalışacaktır.

1

İki seçeneğiniz vardır:

  1. Bunu bulunduğu her türlü modül den WorkoutRecord modelini alabilirsiniz Bu yaklaşımı kullanarak

    from myapp.models import WorkoutRecord 
    related_workoutrecord = models.ForeignKey(WorkoutRecord, null=True, blank=True) 
    

    (bu standart python yaklaşımdır), bazen alabilirsiniz Dairesel ithalatı olan bir duruma dönüştürmek için, bir alternatif var:

  2. Bir dizgiyi, ilk bağımsız değişken olarak kullanabilirsiniz. İlişki kurmak istediğiniz modeli belirtmek için ForeignKey veya ManytoManyField. Bu bir django özelliği.Eğer the documentation for ForeignKey relationships bakarsak, diyor: Henüz tanımlanmamış bir model üzerinde bir ilişki oluşturmak gerekiyorsa

    , yerine modeli nesnenin kendisinden daha, modelin adı kullanabilirsiniz:

    Bu, model henüz tanımlanmamış, ancak aynı modülde (örneğin geçerli kodunuzun altındaysa) yer alıyorsa, model adını yalnızca şu tırnak içinde kullanabilirsiniz: 'WorkoutRecord', ancak model başka bir modeldeyse uygulama/modül olarak da dize olarak belirtebilirsiniz: 'myapp.WorkoutRecord'

İlgili konular