2013-04-23 52 views
6

我所謂的「活動」的Django ForeignKey的問題相關的類

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

的ForeignKey的是關係到一個名爲WorkoutRecord類,它應該被允許加入課堂下創建在我的模型如下ForeignKey的領域空白。

加入此列,我跑南,得到了以下錯誤消息後:

NameError: name 'WorkoutRecord' is not defined 

上正在發生的事情有什麼想法?我已經確認'WorkoutRecord'是我模型中的一個類。

我是否需要寫WorkoutRecord作爲一個字符串(帶引號),例如:

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

我很欣賞的反饋

+1

你可以發佈你的模型?聲明的順序也很重要,WorkoutRecord類在哪裏? – 2013-04-23 20:39:24

+0

如果'WorkoutRecord'的定義在'Activity'的定義下(在代碼中),那麼是的,你應該在引號之間寫下來。 – 2013-04-23 20:59:09

回答

8

根據我的評論,請確保「活動」類可以訪問課程'鍛鍊記錄'。

錯誤意味着它說,WorkoutRecord沒有在您的Activity類中定義。

先檢查以下兩件事:

1)您是否導入了它?

2)在Activity之前定義了WorkoutRecord嗎?

+1

真棒反饋! WorkoutRecord的定義在Activity的定義下(在代碼中),所以我把「WorkoutRecord」放在引號之間。看起來另一種選擇是將WorkoutRecord放在Activity下面。 (在這種情況下,我不知道訂單無關緊要)。再次感謝! – bbrooke 2013-04-23 21:07:42

+0

我正在使用南來管理數據庫遷移。你知道爲什麼必須在Activity之前定義WorkoutRecord,即使這兩個模型已經先前已經遷移到數據庫,我只是在新的遷移中添加ForeignKey字段? – Hat 2013-10-24 16:42:27

0

使用'yourapp.Model'格式。

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

用引號引起來。

3

WorkoutRecord類必須在Activity類之前(即在其上面)定義,以便使用不帶引號的類的引用。如果類之間存在循環引用,那麼使用帶引號的字符串版本將有助於獲得稍後在代碼中定義的類的惰性引用。

1

你有兩個選擇:

  1. 您可以導入從它駐留任何模塊WorkoutRecord模型(這是標準的Python方法)

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

    使用這種方法,有時你可以得到進入一種情況,你有循環進口,所以有一個替代方案:

  2. 你可以使用一個字符串作爲第一個參數ForeignKeyManytoManyField指定您希望與之建立關係的模型。這是一個Django功能。如果你看一下the documentation for ForeignKey relationships,它說:

    如果你需要創建一個尚未被定義的模型的關係,您可以使用該模型的名稱,而不是模型對象本身:

    這意味着,如果該模式尚未確定,但駐留在同一模塊中(即它比你目前的代碼),你只需在引號使用型號名稱:'WorkoutRecord',但如果模型是在另一個應用程序/模塊,您還可以將其指定爲字符串:'myapp.WorkoutRecord'