2014-12-04 91 views
6

我上的Django 1.7運行,當我運行python manage.py遷移我收到以下錯誤Django的NameError:名字「bPath」沒有定義

 File "/home/ymorin007/workspace/sites/jantiyes.com/src/deeds/migrations/0006_auto_20141204_1631.py", line 9, in <module> 
    class Migration(migrations.Migration): 
    File "/home/ymorin007/workspace/sites/jantiyes.com/src/deeds/migrations/0006_auto_20141204_1631.py", line 19, in Migration 
    field=models.ImageField(storage=django.core.files.storage.FileSystemStorage(location=bPath('/home/ymorin007/workspace/sites/jantiyes.com/src/media')), max_length=255, null=True, upload_to=deeds.models.picture_name, blank=True), 
NameError: name 'bPath' is not defined 

這是我的行爲/ models.py

from jantiyes.settings.base import MEDIA_ROOT 

upload_storage = FileSystemStorage(location=MEDIA_ROOT) 

def picture_name(self, filename): 

    ext = filename.split('.')[-1] 
    deedname = re.sub('[ ]', '-', self.text.lower()) 
    filename = "DEED-%s-%s.%s" % (self.id, deedname, ext) 

    url = "%s" % filename 

    return url 


class Deed(TimeStampedModel): 

    picture = models.ImageField(upload_to=picture_name, null=True, blank=True, storage=upload_storage, max_length=255) 
    text = models.CharField(max_length=500) 
    when = models.DateField(unique=True) 

我的媒體聲明:

BASE_DIR = Path(__file__).ancestor(3) 
MEDIA_ROOT = BASE_DIR.child("media") 
+0

哪個庫是'Path'從?我看起來不像'pathlib',因爲它沒有'ancestor'方法。 – 2014-12-18 16:34:57

+0

我是Django的新手,所以不確定你想要我檢查 – Yannick 2014-12-18 17:29:06

+0

對於記錄我想知道從哪個模塊導入'Path'。 – 2014-12-18 17:54:37

回答

7

很難說沒有的jantiyes.settings.base.MEDIA_ROOT確切的定義,但我想這是一個類(bPath)的實例,它是不是deconstructible那是一個subclass of unicode。因此,移民作家認爲它不需要任何進口,並且簡單地repr結果爲bPath('/home/ymorin007/workspace/sites/jantiyes.com/src/media')的值。

你有兩個選擇:

  1. 確保jantiyes.settings.base.MEDIA_ROOT定義爲字符串,從而正確地遷移作家處理。例如MEDIA_ROOT = '/home/ymorin007/workspace/sites/jantiyes.com/src/media'在您的jantiyes.settings.base模塊文件中。
  2. 通過定義deconstruct方法將自動導入路徑返回,確保bPath類別爲可解構
+0

。 BASE_DIR = Path(__ file __)。祖先(3) MEDIA_ROOT = BASE_DIR.child(「media」) – Yannick 2014-12-18 12:47:24

+0

同樣,很難說沒有關於Path類的起源細節,但我猜測MEDIA_ROOT = str (BASE_DIR.child(「media」))'應該做什麼? – 2014-12-18 16:36:53

+0

str(BASE_DIR.child(「media」))修復了一切...... Bravo – Yannick 2014-12-18 17:41:15

1

哪裏MEDIA_ROOT定義?我假設它在你的設置文件中定義的,在這種情況下,你可能需要

from django.conf import settings 

upload_storage = FileSystemStorage(location=settings.MEDIA_ROOT) 
+0

是的,我從jantiyes.settings.base導入MEDIA_ROOT – Yannick 2014-12-05 13:53:13

+0

我的猜測是,它不喜歡'upload_storage'定義在'__init__'函數之外。 '__init__'函數內部的代碼只在實例化時被調用,但是當你運行'migrate'或'runserver'時,其外部的代碼會被調用。我的媒體聲明路徑爲 – Jared 2014-12-05 18:08:23

相關問題