我目前正在参与一个项目,我正在使用Django 1.7开发版本.我想使用"makemigrations"和"migrate"将我在模型中所做的更改(添加字段,删除模型等)添加到数据库模式中"commmands.I为我的应用程序中的一个模型添加了一个"age"字段.
country = models.CharField(max_length=50, blank=True)
address = models.CharField(max_length=100, blank=True)
postal_code = models.IntegerField(max_length=50, blank=True)
city = models.CharField(max_length=50, blank=True)
phone_no = models.CharField(max_length=25, blank=True)
skype_name = models.CharField('Skype Username',max_length=50, blank=True)
age=models.IntegerField(max_length=25,blank=True)
Run Code Online (Sandbox Code Playgroud)
当我使用"makemigrations"命令时,输出就像---"没有检测到更改".我猜"makemigrations"无法弄清楚对架构所做的更改.任何建议我怎样才能使它工作?
我想要像Users and Options.
对于旧的 django 来说,fixtures 是非常简单的方法,但现在 django 说要以我不完全理解的迁移方式来做。
现在我的迁移文件夹中已经有 10 个迁移。我很困惑我在哪里保存我的初始数据迁移文件。
如果我喜欢0011_initial_data并把它放在其他迁移中,那么它会在长长的迁移列表中丢失,并且新用户不容易注意到那是什么。而且如果有人压制迁移,那么没有人会知道那里是否有一些数据。
我想将它放在某个名为 data migration 的文件夹中。我怎样才能做到这一点
这是他们网站上的示例代码。但是我应该把它放在哪里以免混淆
# -*- coding: utf-8 -*-
from django.db import models, migrations
def combine_names(apps, schema_editor):
# We can't import the Person model directly as it may be a newer
# version than this migration expects. We use the historical version.
Person = apps.get_model("yourappname", "Person")
for person in Person.objects.all():
person.name = "%s %s" % (person.first_name, person.last_name)
person.save()
class Migration(migrations.Migration):
dependencies = …Run Code Online (Sandbox Code Playgroud) 我正在使用 Django 1.8。
运行时python manage.py squashmigrations myapp我得到这个:
manage.py squashmigrations: error: the following arguments are required: migration_name
Run Code Online (Sandbox Code Playgroud)
我如何找到migration_name?
使用 django 1.8 + Postgres 9+,我有带有自定义 PG 数据类型(如 ltree)的模型。从零创建数据库失败,因为
CREATE EXTENSION ltree;
Run Code Online (Sandbox Code Playgroud)
不被执行。我尝试进行空迁移,但在模型创建后运行。是否存在在模型创建之前运行 sql 的方法?
我正在向现有模型添加一个字段:
...
booking_id = models.CharField(null=False, unique=True, max_length=5)
...
Run Code Online (Sandbox Code Playgroud)
现在,当我运行时./manage makemigrations,要求一个默认值。该值是在pre_save信号中创建的。在这种情况下,我应该给出什么作为默认值?
显然,如果我给出一个默认值,当我运行./manage migrate这会引发django.db.utils.IntegrityError
我有这个领域,
job_created = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
现在我想添加这样的东西,如何基于post_created本身的默认值.我希望第一个last_modified是在创建作业时,我想要类似的东西
last_modified = models.DateTimeField(auto_now=True, default = post_created)
Run Code Online (Sandbox Code Playgroud)
或者,如果我在运行迁移时提供一个默认值,该怎么做?
我进行了迁移,并意识到自己犯了一个错误(通过添加默认值),然后进行了新的迁移,该迁移允许使用null。
我不希望我的同事运行第一次迁移,该迁移将默认值添加到成千上万的记录。如何在不中断当前迁移的情况下删除该迁移(通常,如果仅删除迁移,则会出现很多错误,很难修复)。
我假设您可以使用命令?我以为就是这样〜>
例如 django manage.py deletemigration <migration_id>
虽然我的配置看起来不错,但我的python:3图像似乎没有预期的DJANGO_SECRET_KEY设置,至少在Dockerfile尝试运行迁移时
$ docker-compose config
services:
api:
build:
context: /Users/ben/Projects/falcon/falcon-backend
dockerfile: Dockerfile
depends_on:
- db
- redis
environment:
DJANGO_SECRET_KEY: 'some-secret-that-works-elsewhere'
$
$ docker-compose up --build api
[...]
Step 6/7 : RUN echo `$DJANGO_SECRET_KEY`
---> Running in fbfb569c0191
[...]
django.core.exceptions.ImproperlyConfigured: Set the DJANGO_SECRET_KEY env variable
ERROR: Service 'api' failed to build: The command '/bin/sh -c python manage.py migrate' returned a non-zero code: 1
Run Code Online (Sandbox Code Playgroud)
然而,最后一行CMD python manage.py runserver 0.0.0.0:8001 --settings=falcon.settings.dev-microservice确实按需要启动,
并设置了必要的环境变量。
# Dockerfile -- api …Run Code Online (Sandbox Code Playgroud) 我已将 django-mptt 添加到现有数据库,并创建新的迁移。
迁移过程中要求提供的默认值level,left,right和这样的领域,但不将添加model.rebuild操作迁移文件。
如何手动将重建操作添加到迁移文件?
django-simple-history书写历史改变instance.save()方法。但是当我写迁移更改实例数据时,更改没有出现。
是save()的方法
Model = apps.get_model('myapp', 'MyModel')
Run Code Online (Sandbox Code Playgroud)
和
MyModel
Run Code Online (Sandbox Code Playgroud)
一样吗?有没有办法将这种变化写入历史?