我将我的项目从 django 1.6 升级到 1.8。迁移时,我收到 contenttype 错误:
django.db.utils.IntegrityError: null value in column "name" violates not-null constraint
Run Code Online (Sandbox Code Playgroud)
详细信息:失败的行包含(31、null、django_auth、adgroup)。
我尝试迁移 contenttype 0002 但它告诉我:
django.db.utils.ProgrammingError: relation "django_content_type" already exists
Run Code Online (Sandbox Code Playgroud)
我如何克服第一个迁移文件?
有没有人编写过单元测试来验证他们的 Django 应用程序中是否存在未生成的迁移?我认为它可能看起来像:
python manage.py makemigrations"no migrations were found"如果没有,我将编写一个,以便我们的构建失败。
创建项目、应用程序并将该应用程序添加到我的 后INSTALLED_APPS,我尝试通过AbstractUser在我的 中进行子类化来创建自定义用户类models.py:
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
pass
Run Code Online (Sandbox Code Playgroud)
然后我尝试运行makemigrations并收到此错误:
SystemCheckError: System check identified some issues:
ERRORS:
auth.User.groups: (fields.E304) Reverse accessor for 'User.groups' clashes with reverse accessor for 'CustomUser.groups'.
HINT: Add or change a related_name argument to the definition for 'User.groups' or 'CustomUser.groups'.
auth.User.user_permissions: (fields.E304) Reverse accessor for 'User.user_permissions' clashes with reverse accessor for 'CustomUser.user_permissions'.
HINT: Add or change a related_name argument to the definition for 'User.user_permissions' or 'CustomUser.user_permissions'.
main.CustomUser.groups: (fields.E304) …Run Code Online (Sandbox Code Playgroud) 我在我的一个模型中添加了一个用户外部字段并进行了迁移。系统提示我添加默认值。user 的默认值假设为 Int,表示 user_id。我没有添加 Int,而是添加了字符串“username”。
现在我被困住了:
return int(value)
ValueError: invalid literal for int() with base 10: 'testuser'
Run Code Online (Sandbox Code Playgroud)
我删除了与模型关联的所有对象,并尝试迁移,但这不起作用,出现相同的错误。( Model.objects.all().delete())
我恢复到以前的迁移,这并没有解决问题,当我迁移时,它得到了相同的 ValueError。( ./manage.py migrate app 0037_auto_20170330_0326)
最后,我删除了新的外国字段,但这也没有解决问题。
在这种情况下我还有什么其他选择?
我的模型非常简单:
class Chat(models.Model):
user = models.ForeignKey(User) #new field that was added
message = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud) 我删除了那个表(哎呀),现在我想重新生成它。有没有允许我这样做的命令?在网上查看,每个人都说要使用 command ./manage.py syncdb,但该命令在最新版本的 Django 中不再可用。所以我尝试了./manage.py migrate,但这并没有生成表格。我也试过./manage.py --run-syncdb,但这也没有做到。
我很确定我可以手动完成,但我希望有一种方法可以使用内置命令来做到这一点。
我有两个应用程序“用户”和“游戏”,这是我的 user/models.py:
from django.db import models
from django.db.models.fields import related
from django.contrib.auth.models import AbstractBaseUser , User,
AbstractUser , PermissionsMixin
from .managers import CustomUserManager
from game.models import Game
class User(AbstractBaseUser,PermissionsMixin):
username = models.CharField(max_length=150,
unique=True, blank=True , null=True,)
email = models.EmailField( blank=True , null=True , unique=True)
password = models.CharField(max_length=100, null=True , blank=True)
objects = CustomUserManager()
class Meta:
db_table = 'user'
class Team(models.Model):
name = models.CharField(max_length=40, unique=True)
players = models.ManyToManyField(User,
related_name="players")
game = models.ManyToManyField(Game)
is_verfied = models.BooleanField(default=False)
class Meta:
db_table = 'team'
Run Code Online (Sandbox Code Playgroud)
这是我的游戏/models.py: …
我有一个包含大量表的数据库。一些表归 postgres 用户所有,而不是我创建的。我想将此类表的所有权转移到我创建的表中,因为在执行 django-migrations 时,您只能为 psql 连接设置一个用户和密码,而该用户无权访问 postgres 用户拥有的表,因此迁移未完成。
到目前为止,谷歌搜索没有帮助,因为他们建议使用ALTER或REASSIGN OWNED 更改数据库或表的所有权。但问题是这些不能更改某些表的所有权,因为它们必须由postgres. 我可以通过逐个选择每个表来手动更改所有权,但是在尝试完全执行时,我收到一条错误消息
"ERROR: cannot reassign ownership of objects owned by role postgres because they are required by the database system".
手动更改一百多个表不是一种选择。有没有人对此问题有任何解决方法?
Django 迁移是否有最佳实践命名约定?
如果这是一次小型迁移,那么名称就非常明显,但是当多个字段发生更改时,事情就会变得混乱。只是想知道是否有人有他们喜欢使用的标准。
重复的模型字段给我带来麻烦(当我运行我的网页时没有这样的表appname_modelname).每当我执行./manage.py迁移appname时,它会给我"重复字段".我检查了我的models.py,其中只有一个.如何删除该重复字段?似乎无论我做什么,它都会停留.我试过了:
删除数据库
删除app文件夹中的迁移文件夹
执行./manage.py sqlclear south,然后在dbshell中删除south_migrationhistory表
./manage.py schemamigration appname --initial,./ manage.py migrate appname --fake
我已经没想完了.
class Document(models.Model):
filename = models.CharField(max_length=255, blank=True, null=True, default=None)
identity = models.CharField(max_length=255, default=None, null=True)
user = models.ForeignKey(User, null=False)
user_id = models.IntegerField(User, null=True)
docfile = models.FileField(upload_to=_upload_path, storage=fs) # upload_to is a path inside the storage path
def get_upload_path(self,filename):
return str(self.user.id) + '/' + str(date.today()) + '/' + filename
Run Code Online (Sandbox Code Playgroud) 我已经编写了一个数据迁移文件,用于为MPTT模型创建一些初始数据。
但是创作失败了
def create_foo(apps, schema_editor):
db_alias = schema_editor.connection.alias
logger = logging.getLogger(__name__)
Foo = apps.get_model("app", "Foo")
for attr in ROLES:
try:
foo = Foo.objects.using(db_alias).get(name=attr[0])
except Foo.DoesNotExist:
parent = Foo.objects.using(db_alias).get(name=attr[1]) if attr[1] else None
if parent:
foo = Foo.objects.create(name=attr[0], parent=parent)
else:
foo = Foo.objects.using(db_alias).create(name=attr[0])
logger.info("Created foo - %s" % foo)
Run Code Online (Sandbox Code Playgroud)
我在执行以下代码时遇到错误,有什么想法吗?
foo = Foo.objects.using(db_alias).create(name=attr[0])
文件“ /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/MySQLdb/connections.py”,行36,在defaultErrorhandler中引发错误类,错误值django.db.utils.IntegrityError:( 1048,“列'lft'不能为空”