【发布时间】:2025-12-28 21:50:15
【问题描述】:
所以我正在开发一个项目 Django/Postgres 项目。
当我运行 docker-compose up 时,项目在一个容器中启动 Django,在另一个容器中启动 Postgres。我可以查看我的项目的某些 URL,但是查询 MyProfile 模型的那些都会导致以下错误:
docker@postgres ERROR: relation "accounts_myprofile" does not exist
我都跑过:
docker-compose run web python manage.py makemigrations
和:
docker-compose run web python manage.py migrate
我不确定这是否重要,但这会返回:
Operations to perform:
Apply all migrations: admin, auth, cities, contenttypes, django_messages, easy_thumbnails, guardian, sessions, sites, userena
Running migrations:
No migrations to apply.
Your models have changes that are not yet reflected in a migration, and so won't be applied.
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.
在下面附加我的 docker-compose 和 Django 设置。
码头工人撰写
web:
restart: always
build: ./web
expose:
- "8000"
links:
- postgres:postgres
volumes:
- /usr/src/app
- /usr/src/app/static
env_file: .env
environment:
DEBUG: 'true'
command: python manage.py runserver 0.0.0.0:8000
postgres:
restart: always
image: kartoza/postgis:9.4-2.1
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data/
models.py
from django.db import models
from django.contrib.auth.models import User
from django.utils.translation import ugettext as _
from userena.models import UserenaBaseProfile
from django.conf import settings
from PIL import Image
from django_resized import ResizedImageField
import datetime
class MyProfile(UserenaBaseProfile):
user = models.OneToOneField(User,
unique=True,
verbose_name=_('user'),
related_name='my_profile')
storename=models.CharField(null=True, blank=True, max_length=20)
streetaddress=models.CharField(null=True, blank=True, max_length=30)
city = models.CharField(null=True, blank=True, max_length=20)
state = models.CharField(null=True, blank=True, max_length=20)
zipcode = models.IntegerField(_('zipcode'),
null=True, blank=True)
nearbyzips1=models.IntegerField(null=True, blank=True)
nearbyzips2=models.IntegerField(null=True, blank=True)
nearbyzips3=models.IntegerField(null=True, blank=True)
nearbyzips4=models.IntegerField(null=True, blank=True)
nearbyzips5=models.IntegerField(null=True, blank=True)
nearbyzips6=models.IntegerField(null=True, blank=True)
phone=models.CharField(null=True, blank=True, max_length=16)
websiteurl=models.CharField(null=True, blank=True, max_length=38)
deliveryoption=models.BooleanField(default=False)
storebio=models.CharField(null=True, blank=True, max_length=100)
storespecials=models.CharField(null=True, blank=True, max_length=65)
reviewavg=models.FloatField(null=True, blank=True, max_length=5)
coverpic = ResizedImageField(max_width=350, upload_to="site_media/media/covers/", null=True, blank=True)
def __unicode__(self):
return u'%s %s %s %s %s %s %s %s' % (self.user, self.storename, self.streetaddress, self.city, self.state, self.zipcode, self.storebio, self.reviewavg)
class Entry(models.Model):
headline= models.CharField(max_length=200,)
body_text = models.TextField()
author=models.ForeignKey(settings.AUTH_USER_MODEL, related_name='entryauthors')
pub_date=models.DateTimeField(auto_now_add=True)
zipcode =models.IntegerField(null=True)
entrytype = models.IntegerField(null=True)
price1 = models.CharField(max_length=20)
price2 = models.CharField(max_length=20)
price3 = models.CharField(null=True, blank=True, max_length=20)
price4 = models.CharField(null=True, blank=True, max_length=20)
price5 = models.CharField(null=True, blank=True, max_length=20)
item_picture = ResizedImageField(max_width=400, upload_to="site_media/media/items/")
def __str__(self):
return u'%s %s %s %s %s %s %s' % (self.headline, self.body_text, self.author, self.pub_date, self.zipcode, self.price1, self.price2)
views.py(仅包含触发错误的查询函数)
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.db import models
from django.contrib.auth.models import User
from accounts.forms import UserReviewForm
from accounts.forms import SellForm
from accounts.models import Entry
from accounts.models import UserReview
from accounts.models import MyProfile
from django.conf.urls import include, url
from django.template.loader import render_to_string
import json as simplejson
from django.core.serializers.json import DjangoJSONEncoder
from django.http import HttpResponse
import datetime
from userena import settings as userena_settings
from django.shortcuts import redirect, get_object_or_404
from userena.utils import signin_redirect, get_profile_model, get_user_model
from userena.views import ExtraContextTemplateView
from django.contrib.auth.decorators import login_required
from django.views.decorators.csrf import csrf_exempt
from django_messages.models import inbox_count_for
from django.contrib.auth.views import login
from accounts.serializers import EntrySerializer
def storefront(request):
if request.user.is_authenticated():
if request.user.my_profile.zipcode:
latest_entries = Entry.objects.filter(zipcode__in=[request.user.my_profile.nearbyzips1,
request.user.my_profile.nearbyzips2,
request.user.my_profile.nearbyzips3,
request.user.my_profile.nearbyzips4,
request.user.my_profile.nearbyzips5]).order_by('-pub_date')[:16]
unread_list = inbox_count_for(request.user)
context = {'latest_entries': latest_entries, 'unread_list': unread_list}
else:
latest_entries = Entry.objects.order_by('-pub_date')[:16]
context = {'latest_entries': latest_entries}
else:
latest_entries = Entry.objects.order_by('-pub_date')[:16]
context = {'latest_entries': latest_entries}
if request.is_ajax():
if request.GET.get('filter') == 'new':
latest_entries = latest_entries.filter(entrytype=1)
context = {'latest_entries': latest_entries}
return render(request, 'storefrontload.html', context)
if request.GET.get('filter') == 'old':
latest_entries = Entry.objects.filter(entrytype=2)
context = {'latest_entries': latest_entries}
return render(request, 'storefrontload.html', context)
if request.GET.get('filter') == 'oklder':
latest_entries = Entry.objects.filter(entrytype=3)
context = {'latest_entries': latest_entries}
return render(request, 'storefrontload.html', context)
return render(request, 'storefront.html', context)
settings.py
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__))
PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
ALLOWED_HOSTS=['*']
DEBUG=True
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': os.environ['DB_NAME'],
'USER': os.environ['DB_USER'],
'PASSWORD': os.environ['DB_PASS'],
'HOST': os.environ['DB_SERVICE'],
'PORT': os.environ['DB_PORT'],
}
}
TIME_ZONE = "UTC"
LANGUAGE_CODE = "en-us"
SITE_ID = int(os.environ.get("SITE_ID", 1))
USE_I18N = True
USE_L10N = True
USE_TZ = True
MEDIA_ROOT = os.path.join(PACKAGE_ROOT, "media")
MEDIA_URL = "/media/"
STATIC_ROOT = os.path.join(PACKAGE_ROOT, "static1")
STATIC_URL = "/static/"
STATICFILES_DIRS = [
os.path.join(PACKAGE_ROOT, "static"),
]
STATICFILES_FINDERS = [
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder",
]
MIDDLEWARE_CLASSES = [
"django.middleware.common.CommonMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'templates'),
],
'APP_DIRS': True,
'OPTIONS': {
'debug': DEBUG,
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
【问题讨论】:
-
我正在尝试将这个在 Django 1.6 上制作的项目升级到 1.10,所以我猜测 1.10 中的某些更改会破坏我的项目,但我无法弄清楚它是什么。跨度>
-
Django 1.8 引入了一个新的数据库迁移系统来代替 South。由于您尝试从 1.6 升级,因此您还需要升级 South 迁移文件。
-
我从未迁移过。我删除了迁移文件夹
-
我正在尝试将此项目移至 1.10,但如果有意义,请使用新的数据库。
标签: django postgresql docker postgis