我将应用程序从 django1.3 升级到 django1.5,并收到此错误:
CommandError: The permission codename 'change_mymodel' clashes with a builtin permission for model 'myapp.MyModel'
Run Code Online (Sandbox Code Playgroud)
相关提交https://github.com/django/django/commit/8c427448d53ec0d860e1669f35deed73d0240ba1
相关票证:https ://code.djangoproject.com/ticket/15915
该代码在django1.3上运行良好。
更新
这个问题很老了,几个月以来我都没有问过。这张票从四年开始就固定了......
每当我尝试在我的 Django 项目之一中使用 South 进行迁移时,我都无法弄清楚如何避免此错误:
错误:
为 askbot 运行迁移:
- 向前迁移到 0006_auto__del_field_tagplus_tag_ptr__add_field_tagplus_id__add_field_tagpl。
askbot:0006_auto__del_field_tagplus_tag_ptr__add_field_tagplus_id__add_field_tagpl
致命错误 - 以下 SQL 查询失败:ALTER TABLE "tagplus" ADD COLUMN "id" serial NOT >NULL PRIMARY KEY DEFAULT -1; 错误是:为表“tagplus”的“id”列指定了多个默认值
迁移错误:>askbot:0006_auto__del_field_tagplus_tag_ptr__add_field_tagplus_id__add_field_tagpl DatabaseError:为表“tagplus”的“id”列指定了多个默认值
迁移文件 0006 代码(部分):
class Migration(SchemaMigration):
def forwards(self, orm):
# Deleting field 'TagPlus.tag_ptr'
db.delete_column(u'tagplus', u'tag_ptr_id')
# Adding field 'TagPlus.id'
db.add_column(u'tagplus', u'id',
self.gf('django.db.models.fields.AutoField')(default=0, primary_key=True),
keep_default=False)
# Adding field 'TagPlus.name'
db.add_column(u'tagplus', 'name',
self.gf('django.db.models.fields.CharField')(default=0, unique=True, max_length=255),
keep_default=False)
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑:
我猜这个错误与我在创建迁移文件时被提示的这个选择有关。
? The field 'TagPlus.tag_ptr' does not have a default specified, yet is …Run Code Online (Sandbox Code Playgroud) 是否可以从PyCharm运行manage.py south命令?
如果有可能,怎么办呢?
我找不到有关它的文档.
我一直在和South合作开发一个新的Django项目.
我刚刚添加了一个新模型Client,我想确保任何运行的测试或任何新的数据库设置总是填充一个实例Client,所以我添加了一个新的实例到项目的initial_data.json.
现在每当我运行测试或填充新数据库时,它看起来像是initial_data.json在第一次创建表之后加载两次.(失败并带有追溯).在迁移应用之后第二次.(成功就好了)
例如,running manage.py syncdb --migrate --noinput给我以下输出:
Syncing...
Creating tables ...
<snip>
Installing custom SQL ...
Installing indexes ...
Problem installing fixture 'initial_data.json': Traceback (most recent call last):
File ".../django/core/management/commands/loaddata.py", line 174, in handle
obj.save(using=using)
File ".../django/core/serializers/base.py", line 165, in save
models.Model.save_base(self.object, using=using, raw=True)
File ".../django/db/models/base.py", line 522, in save_base
manager.using(using).filter(pk=pk_val).exists())):
File ".../django/db/models/query.py", line 496, in exists
return self.query.has_results(using=self.db)
File ".../django/db/models/sql/query.py", line 424, in has_results
return bool(compiler.execute_sql(SINGLE)) …Run Code Online (Sandbox Code Playgroud) 将最近的迁移应用到我的应用程序时,我在输出中遇到以下消息:
- Loading initial data for myapp
Run Code Online (Sandbox Code Playgroud)
我有一点尤里卡时刻.在执行迁移之后,似乎可以让South将初始数据注入数据库.我怎样才能做到这一点?
我有一个模型(/core/models/milestone.py)使用自定义类作为属性:
from core.models.IntegerRangeField import IntegerRangeField
class milestone(models.Model):
name = models.CharField(max_length=128, null=False, blank=False)
completion = IntegerRangeField(min_value=0,max_value=100, null=False, default=0, blank=True)
due_date = models.DateField(null=False, blank=False)
phase = models.ForeignKey('project_phase',null=False, blank=False)
last_updated_date = models.DateTimeField(null=False, blank=True, default=datetime.now())
def __unicode__(self):
return self.name
Run Code Online (Sandbox Code Playgroud)
(实际上还有更多代码 - 完整拷贝)
它使用的自定义类是:
from django.db import models
class IntegerRangeField(models.IntegerField):
def __init__(self, verbose_name=None, name=None, min_value=None, max_value=None, **kwargs):
self.min_value, self.max_value = min_value, max_value
models.IntegerField.__init__(self, verbose_name, name, **kwargs)
def formfield(self, **kwargs):
defaults = {'min_value': self.min_value, 'max_value':self.max_value}
defaults.update(kwargs)
return super(IntegerRangeField, self).formfield(**defaults)
class Meta:
app_label = 'core'
from …Run Code Online (Sandbox Code Playgroud) 我已在本地服务器上使用south成功同步了我的数据库.我在Heroku中使用南方时遇到了问题.我跑的时候
git add app/migrations/*
git commit -m 'adding new migrations'
heroku run python manage.py migrate app
Run Code Online (Sandbox Code Playgroud)
我收到了一个DatabaseError.关系字段已存在.
任何想法为什么这不起作用?此外,每次我的某个模型更改时,是否需要在本地和生产环境中运行迁移?谢谢阅读.
在尝试将新字段添加到预先存在的模型/表时,我得到一个"表已存在"的DatabaseError.我在此之前运行了迁移,所以我有点困惑为什么添加一个新字段会弹出这个错误.
执行的命令:
python manage.py schemamigration app --auto
python manage.py migrate app
Run Code Online (Sandbox Code Playgroud)
像以前这样的SO问题是通过伪造迁移来回答的.
python manage.py migrate app --fake
python manage.py migrate app
Run Code Online (Sandbox Code Playgroud)
由此产生的问题是未创建列.所以当你运行服务器时,你会看到一个DatabaseError'没有这样的列'.
至于我的模型,我只添加了一个CharField.
在此先感谢您的帮助-
当我尝试这个时,我收到了这个错误:
来源./env/bin/activate
sudo python manage.py syncdb
错误:没有名为south的模块
我在激活虚拟环境后安装南,使用pip install south(以及django).
在settings.py中安装了应用:
INSTALLED_APPS = (
'south',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
Run Code Online (Sandbox Code Playgroud)
可能是什么问题呢?
更新:尝试不使用sudo同步时出现此错误.也许它与"南方"问题有关:
(env)andrius @ ubuntu:〜/ djcode/myproject $ python manage.py syncdb
Syncing...
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/andrius/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
utility.execute()
File "/home/andrius/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/andrius/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv
self.execute(*args, **options.__dict__)
File "/home/andrius/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute
output = self.handle(*args, **options)
File "/home/andrius/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 371, …Run Code Online (Sandbox Code Playgroud) 我有几个django应用程序:
INSTALLED_APPS = (
'geonode.exposure',
'geonode.isc_viewer',
'geonode.geodetic',
'geonode.observations',
'geonode.ged4gem',
Run Code Online (Sandbox Code Playgroud)
我需要管理所有这些,除了一个syncdb.我怎样才能syncdb故意跳过geonode.exposure申请?
更新: 我没有描述完整配置,请允许我详细介绍:我正在使用南来管理除了曝光之外的所有应用程序的数据库迁移和固定装置.曝光应用程序正在访问外部数据库并正在使用路由器这样做(这就是我希望它被syncdb跳过的原因).我的路由器设置如下所示:
class GedRouter(object):
def db_for_read(self, model, **hints):
"Point all operations on ged models to 'geddb'"
if model._meta.app_label == 'exposure':
return 'geddb'
return 'default'
def allow_syncdb(self, db, model):
if db == 'geddb' or model._meta.app_label == "ged":
return False # we're not using syncdb on our legacy database
else: # but all other models/databases are fine
return True
Run Code Online (Sandbox Code Playgroud)
南不尊重allow_syncdb方法吗?是曝光应用程序南部运行syncbd因为我没有迁移它?
django-south ×10
django ×9
python ×5
askbot ×1
heroku ×1
postgresql ×1
pycharm ×1
sql ×1
virtualenv ×1