所以我一直在修改升级到新版本的Django(1.8).我目前正在使用1.7版,我正在努力让我的生产服务器听取1.8中的新设置.
从1.8开始,任何TEMPLATE_*
设置都已根据文档弃用,并已替换为该TEMPLATES
设置.
我试图像我一样继续,但我希望在弃用时间线结束之前转移到新设置.
在我的1.7设置中,我只有两个旧设置,现在已弃用,如下所示:
from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS
TEMPLATE_CONTEXT_PROCESSORS += ("django.core.context_processors.request",)
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'templates'),
)
Run Code Online (Sandbox Code Playgroud)
在新的1.8设置中,我有以下内容:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
# Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this
# list if you haven't customized them:
'django.contrib.auth.context_processors.auth',
'django.template.context_processors.request',
'django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.contrib.messages.context_processors.messages',
],
},
},
]
Run Code Online (Sandbox Code Playgroud)
但是,当我使用这些设置时,我的生产服务器无法找到模板文件,但我的本地工作正常.
编辑:原来APP_DIRS …
我有以下型号:
class User(models.Model):
user_question = models.ForeignKey(UserQuestion)
class Question(models.Model):
text = models.CharField(max_length=255)
class UserQuestion(models.Model):
answer = models.CharField(max_length=255)
question = models.ForeignKey(Question)
user = models.ForeignKey(User, related_name='questions')
Run Code Online (Sandbox Code Playgroud)
当我运行下面的查询时,用户模型也被删除
user.questions.all().delete()
Run Code Online (Sandbox Code Playgroud)
有没有办法在不删除用户的情况下删除问题?
我尝试重复这些问题,但没有用
questions = user.questions.all()
for an in questions:
answer.delete()
Run Code Online (Sandbox Code Playgroud)
我认为查询集很懒,所以也许我需要在删除之前对其进行评估,所以我打印了它,但这不起作用。
print questions
questions.delete()
Run Code Online (Sandbox Code Playgroud)
我知道使 ForeignKey 可为空将为我提供诸如 clear 和 remove 之类的方法,但我不想这样做,因为我不想要任何孤立的用户问题。
我更新了外键如下
class UserQuestion(models.Model):
answer = models.CharField(max_length=255)
user = models.ForeignKey(User, related_name='questions', null=True, on_delete=models.SET_NULL)
Run Code Online (Sandbox Code Playgroud)
我跑了makemigrations
,migrate
但是当我运行下面的查询时,问题模型仍然被删除。
user.questions.all().delete()
Run Code Online (Sandbox Code Playgroud) 当允许Django模型的数据库字段为NULL时null=True
,默认值是否保证为NULL?或者我必须手动配置:
report = models.FileField(upload_to='reports', null=True, default=None)
^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
关于模型字段的文档中我找不到任何关于它的内容.
我正在使用Django 1.7,我的灯具有问题.
我希望Django使用默认值或使用该save()
方法创建未指定的值.
这是我目前的对象:
# File: uuidable.py
import uuid
from django.db import models
from django.utils.translation import ugettext_lazy as _
class Uuidable(models.Model):
uuid = models.CharField(_('uuid'), blank=True,
null=False, unique=True,
max_length=64, default=uuid.uuid4()) # Tried here
class Meta:
abstract = True
def save(self, *args, **kwargs):
if self.pk is None:
self.uuid = uuid.uuid4() # Tried here also
super().save(*args, **kwargs)
# File: timestampable.py
from django.db import models
from django.utils.translation import ugettext_lazy as _
class Timestampable(models.Model):
created_at = models.DateTimeField(_('created at'), auto_now_add=True)
updated_at = models.DateTimeField(_('updated at'), …
Run Code Online (Sandbox Code Playgroud) ImportError at /
cannot import name views
Request Method: GET
Request URL: http://127.0.0.1:8000/
Django Version: 1.7
Exception Type: ImportError
Exception Value:
cannot import name views
Exception Location: /Users/adam/Desktop/qblog/qblog/urls.py in <module>, line 1
Python Executable: /Users/adam/Desktop/venv/bin/python
Python Version: 2.7.8
Python Path:
['/Users/adam/Desktop/qblog',
'/Users/adam/Desktop/venv/lib/python27.zip',
'/Users/adam/Desktop/venv/lib/python2.7',
'/Users/adam/Desktop/venv/lib/python2.7/plat-darwin',
'/Users/adam/Desktop/venv/lib/python2.7/plat-mac',
'/Users/adam/Desktop/venv/lib/python2.7/plat-mac/lib-scriptpackages',
'/Users/adam/Desktop/venv/lib/python2.7/lib-tk',
'/Users/adam/Desktop/venv/lib/python2.7/lib-old',
'/Users/adam/Desktop/venv/lib/python2.7/lib-dynload',
'/usr/local/Cellar/python/2.7.8/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
'/usr/local/Cellar/python/2.7.8/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
'/usr/local/Cellar/python/2.7.8/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
'/usr/local/Cellar/python/2.7.8/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
'/usr/local/Cellar/python/2.7.8/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
'/Users/adam/Desktop/venv/lib/python2.7/site-packages']
Server time: Sun, 21 Sep 2014 15:12:22 +0000
Run Code Online (Sandbox Code Playgroud)
这是位于qblog/qblog /中的urls.py:
from django.conf.urls import patterns, url
from . import views
urlpatterns = patterns(
'',
url(r'^admin/', include(admin.site.urls)), …
Run Code Online (Sandbox Code Playgroud) 将我的Django 1.6应用程序升级到Django 1.7后,我从PostgreSQL获取数据时开始出现随机错误:
DatabaseError: server sent data ("D" message) without prior row description ("T" message)
lost synchronization with server: got message type "?", length -1244613424
DatabaseError: lost synchronization with server: got message type "0", length 842674226
ProgrammingError: no results to fetch
ValueError: invalid literal for int() with base 10: 'feuj3f47jvsdv7tgnj43g63j'
Run Code Online (Sandbox Code Playgroud)
当我在浏览器中快速打开10个选项卡时,一半选项卡正常加载,其中一半会出现数据库错误.当我刷新发生错误的选项卡时,它们会正常加载.
我通过uwsgi和nginx运行Django,psycopg2的版本是2.5.4.
总的来说,看起来与Postgres的沟通完全被打破,不同查询的结果混合在一起.
编辑:
经过几个小时的故障排除后,我发现了以下内容:
Django 1.6 + uwsgi - 作品
Django 1.7 + gunicorn - 作品Django 1.7 + uwsgi -
不起作用,抛出数据库错误.所以问题似乎与特定的uwsgi和Django 1.7组合.这很奇怪,我有另一个Django 1.7项目在相同的服务器上运行相同的uwsgi,它没有问题.
有任何想法吗?
(我真的不介意切换到gunicorn,可能必须采用这种方式,但它仍然很有趣,为什么会发生这种情况)
更新2:仔细检查显示Django内部发生了完全疯狂的事情,就像模型的主键被当前用户的session_id替换(这是"带有基数10的int()的无效文字"错误)和Django向DB发出查询"忘记" "指定WHERE子句.我可能会说某种内存损坏.
更新3:我们从uwsgi切换到gunicorn,问题现在已经消失.一切都很好.我可能仍在寻找合适的解决方案.
在特定部署中,我遇到了Django 1.7与新App Registry有关的问题.通常我会吹掉实例并重新创建它,但是当我销毁实例时它会继续发生.
它始终是导致此错误的产品应用程序,我使用app.py文件将标签更改为sc_products,但是现在sc_products的内容也已定义.
在这个特定的例子中,我试图迁移应用程序.
Running migrations:
Applying sc_products.0001_initial...Traceback (most recent call last):
File "manage.py", line 9, in <module>
execute_from_command_line(sys.argv)
File "/home/savingschampion/.virtualenvs/savings_champion/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
utility.execute()
File "/home/savingschampion/.virtualenvs/savings_champion/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/savingschampion/.virtualenvs/savings_champion/local/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv
self.execute(*args, **options.__dict__)
File "/home/savingschampion/.virtualenvs/savings_champion/local/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute
output = self.handle(*args, **options)
File "/home/savingschampion/.virtualenvs/savings_champion/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 160, in handle
executor.migrate(targets, plan, fake=options.get("fake", False))
File "/home/savingschampion/.virtualenvs/savings_champion/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 63, in migrate
self.apply_migration(migration, fake=fake)
File "/home/savingschampion/.virtualenvs/savings_champion/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 91, in apply_migration
if self.detect_soft_applied(migration):
File "/home/savingschampion/.virtualenvs/savings_champion/local/lib/python2.7/site-packages/django/db/migrations/executor.py", …
Run Code Online (Sandbox Code Playgroud) IMPORTANT: This question is no longer relevant.
In a Django 1.7 migration I try to create Comment entries programatically with the following code:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
def create_genericcomment_from_bookingcomment(apps, schema_editor):
BookingComment = apps.get_model('booking', 'BookingComment')
Comment = apps.get_model('django_comments', 'Comment')
for comment in BookingComment.objects.all():
new = Comment(content_object=comment.booking)
new.save()
dependencies = [
('comments', '0001_initial'),
('django_comments', '__first__'),
]
operations = [
migrations.RunPython(create_genericcomment_from_bookingcomment),
]
Run Code Online (Sandbox Code Playgroud)
And it produces an error:
TypeError: 'content_object' is an …
我有以下型号
class VucutBolgesi(models.Model):
site = models.ForeignKey(Site)
bolge = models.CharField(verbose_name="Bölge", max_length=75)
hareketler = models.ManyToManyField("Hareket", verbose_name="Hareketler", null=True, blank=True, help_text="Bölgeyi çal??t?ran hareketler")
class Hareket(models.Model):
site = models.ForeignKey(Site)
hareket = models.CharField(verbose_name="Hareket", max_length=75 )
bolgeler = models.ManyToManyField(VucutBolgesi, verbose_name="Çal??t?rd??? Bölgeler", null=True, blank=True,
help_text="Hareketin çal??t?rd??? bölgeler")
Run Code Online (Sandbox Code Playgroud)
我在两个表上都有相同的M2M,因为我希望在两个管理表单上显示相同的中间表.他们还必须使用相同的表(不创建两个单独的表),因为一个管理表单中的一个更改必须反映到另一个.就像,如果我添加一个新的Hareket
来VucutBolgesi
过HareketAdmin
,然后同样的结果shoudl上看到VucutBolgesiAdmin
过.
为了实现这一点,我首先删除hareketler
M2M字段,VucutBolgesi
因此Hareketler
模型将创建中间表.我这个迁移,然后添加hareketler
到VucutBolgesi
与db_table
属性,这样它会识别同一中介表.
该领域的最终外观如下
hareketler = models.ManyToManyField("Hareket", verbose_name="Hareketler", db_table="antrenman_hareket_bolgeler",
null=True, blank=True, help_text="Bölgeyi çal??t?ran hareketler")
Run Code Online (Sandbox Code Playgroud)
当我尝试迁移它时,django会抛出异常
django.db.utils.OperationalError: table "antrenman_hareket_bolgeler" already exists
Run Code Online (Sandbox Code Playgroud)
我应该如何伪造这种迁移?
以下是每次运行时django创建的迁移 …
我真的不知道问题是什么.
日志读取
致命:抱歉,已有太多客户
一遍又一遍地.起初我认为有时连接徘徊或没有正确关闭所以我通过连接到数据库并检查在任何给定时间有多少打开的连接测试,并且答案一直是1.
我试图连接到使用数据库的网站,我设法瞥见2或3个打开的连接,这些连接在页面加载完成后立即关闭.
我的另一个猜测是,有时网站的并发连接会出现峰值,导致数据库停止接受新连接,并且不知何时不允许删除当前连接.
我没有写任何与数据库连接的代码,我使用的是一个非常香草的Django(1.7)后端来处理所有的连接.
在搜索谷歌时我找不到任何东西,有没有人遇到过任何问题?
编辑:
重要组成部分:
port = 26445 # (change requires restart)
max_connections = 500 # (change requires restart)
unix_socket_directory = '/home/clearintent/webapps/norr2_db/run' # (change requires restart)
shared_buffers = 32MB # min 128kB
# (change requires restart)
log_destination = 'stderr' # Valid values are combinations of
logging_collector = on # Enable capturing of stderr and csvlog
log_directory = 'pg_log' # directory where log files are written,
log_filename = 'postgresql-%a.log' # log file name pattern,
log_truncate_on_rotation …
Run Code Online (Sandbox Code Playgroud) django ×10
django-1.7 ×10
python ×5
postgresql ×2
python-2.7 ×2
django-1.8 ×1
django-views ×1
fixtures ×1
null ×1
psycopg2 ×1
python-3.4 ×1
uwsgi ×1