Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django NameError: name 'bPath' is not defined

I'm running on Django 1.7 and when I run python manage.py migrate I get the following error

      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

This is my deeds/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)

My Media declaration:

BASE_DIR = Path(__file__).ancestor(3)
MEDIA_ROOT = BASE_DIR.child("media")
like image 807
Yannick Avatar asked Dec 04 '14 20:12

Yannick


2 Answers

It's hard to tell without the exact definition of jantiyes.settings.base.MEDIA_ROOT but I guess it's an instance of a class (bPath) that is not deconstructible and that is a subclass of unicode. Hence the migration writer assumes it doesn't need any imports and simply repr the value which turns out to be bPath('/home/ymorin007/workspace/sites/jantiyes.com/src/media').

You have two options:

  1. Make sure jantiyes.settings.base.MEDIA_ROOT is defined as string and thus correctly handled by the migration writer. e.g. MEDIA_ROOT = '/home/ymorin007/workspace/sites/jantiyes.com/src/media' in your jantiyes.settings.base module file.
  2. Make sure the bPath class is deconstructible by defining a deconstruct method returning the import path to itself.
like image 62
Simon Charette Avatar answered Sep 18 '22 08:09

Simon Charette


Where is MEDIA_ROOT defined? I'm assuming it's defined in your settings file, in which case you likely need

from django.conf import settings

upload_storage = FileSystemStorage(location=settings.MEDIA_ROOT)
like image 23
Jared Avatar answered Sep 17 '22 08:09

Jared