2014-12-04 9 views
6

biegnę na Django 1.7 i gdy uruchomię python manage.py migrate otrzymuję następujący błądDjango NameError: nazwa 'bpath' nie jest zdefiniowane

 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 

To jest moje czyny/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) 

Moja deklaracja media:

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

Z której biblioteki pochodzi 'Path'? Nie wyglądam jak "pathlib", ponieważ nie ma metody "przodka". –

+0

Jestem nowy w Django, więc nie jestem do końca pewien, co chcę, żebym sprawdził. – Yannick

+0

Dla rekordu chciałem się dowiedzieć, z którego modułu pochodzi import "Ścieżka". –

Odpowiedz

7

Trudno powiedzieć bez dokładnej definicji jantiyes.settings.base.MEDIA_ROOT ale myślę, że jest to instancja klasy (bPath), które nie jest deconstructible i to jest subclass of unicode. W związku z tym program piszący o migracji zakłada, że ​​nie potrzebuje żadnego importu, a po prostu wartość ta okazuje się być bPath('/home/ymorin007/workspace/sites/jantiyes.com/src/media').

Masz dwie opcje:

  1. Upewnij się, jantiyes.settings.base.MEDIA_ROOT jest zdefiniowany jako ciąg, a tym samym prawidłowo obsługiwane przez pisarza migracji. na przykład MEDIA_ROOT = '/home/ymorin007/workspace/sites/jantiyes.com/src/media' w pliku modułu .
  2. Upewnij się, że klasa bPath jest dekonstrukcyjna przez określenie metody deconstruct zwracającej ścieżkę importu do niej samej.
+0

Moja ścieżka do deklarowania mediów. BASE_DIR = Ścieżka (__ plik __). Przodek (3) MEDIA_ROOT = BASE_DIR.child ("media") – Yannick

+0

Znowu trudno powiedzieć bez szczegółów o pochodzeniu klasy 'Path', ale zgaduję, że' MEDIA_ROOT = str (BASE_DIR.child ("media")) 'powinien zrobić? –

+0

str (BASE_DIR.child ("media")) naprawia wszystko ... Bravo – Yannick

1

Gdzie jest MEDIA_ROOT zdefiniowane? Zakładam, że jest to zdefiniowane w pliku ustawień, w tym przypadku prawdopodobnie trzeba

from django.conf import settings 

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

Tak, mam z jantiyes.settings.base import MEDIA_ROOT – Yannick

+0

Zgaduję, że nie podoba mi się to, że 'upload_storage' jest zdefiniowany poza funkcją' __init__'. Kod wewnątrz funkcji '__init__' jest wywoływany tylko w instancji, ale kod poza nim jest wywoływany za każdym razem, gdy uruchamiasz' migrate' lub 'runserver'. – Jared

Powiązane problemy