Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

return database_name == ':memory:' or 'mode=memory' in database_name TypeError: argument of type 'PosixPath' is not iterable

I was making one webapp in django. I try to deployed it on pythonanywhere everything was going fine but in last when i tried to collect static files using python manage.py collectstatic it is giving me this error:

return database_name == ':memory:' or 'mode=memory' in database_name
TypeError: argument of type 'PosixPath' is not iterable

suggest some idea how can I solve it.

Here is my setting.py file

import os
from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '!25%rdt-$_$bsc*fl)e7x2*x6awjca^3_2t-k@l0tu*8k!f33&'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False

ALLOWED_HOSTS = ['*']


# Database
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}


# Password validation
# https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.1/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR / 'static/')
like image 906
Nitin Saini Avatar asked Oct 03 '20 15:10

Nitin Saini


2 Answers

If you are using Django v3.1 then you can try placing str() around the database path in the settings.py file. This is because SQLite only accepts strings and Django v3.1 settings.py returns a pathlib.Path object.

# settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': str(BASE_DIR / 'db.sqlite3'),
    }
}

I had the same problem and found the answer here: https://forum.djangoproject.com/t/django-tutorial-python-manage-py-startapp-polls-fails/2718

like image 107
Martin Avatar answered Sep 30 '22 09:09

Martin


#in settings.py do

# Database
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': str(BASE_DIR / 'db.sqlite3'),
    }
}

Here is the issue:

BASE_DIR = Path(__file__).resolve().parent.parent

Both type(BASE_DIR) and type(BASE_DIR / 'db.sqlite3') are <class 'pathlib.PosixPath'>

like image 24
George m Avatar answered Sep 30 '22 09:09

George m