- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个模型 SessionCategory
,它有一个唯一字段 name
。此模型的某些关键实例由 name
引用;唯一的问题是 name
在我们的内部仪表板中也是可编辑的,因此用户可能会通过更改 name
无意中“破坏”这些引用。
为了解决这个问题,我想创建一个新字段 name_slug
,它是 name
的 slugified 版本,也具有唯一约束。我已尝试执行以下操作:
from django.db import models
from django.utils.text import slugify
from django.db.models.signals import pre_save
from django.dispatch import receiver
class SessionCategory(models.Model):
name = models.CharField(max_length=255, unique=True)
name_slug = models.CharField(max_length=255, unique=True)
@receiver(pre_save, sender=SessionCategory)
def create_name_slug(sender, instance, **kwargs):
if not instance.name_slug:
instance.name_slug = slugify(instance.name)
我在其中添加了 name_slug
唯一字段。问题是,如果我尝试 python manage.py makemigrations
,我会收到以下提示:
(venv) Kurts-MacBook-Pro-2:lucy-web kurtpeek$ python manage.py makemigrations
You are trying to add a non-nullable field 'name_slug' to sessioncategory without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
Select an option:
我在 https://docs.djangoproject.com/en/dev/howto/writing-migrations/#migrations-that-add-unique-fields 遇到了一个工作流用于编写创建唯一字段的迁移。在该示例中,唯一字段是使用“通用”函数 uuid.uuid4()
生成的。然而,就我而言,我需要访问特定实例的 name
,就像我希望通过连接到 pre_save
信号来获得一样。
如何创建此迁移并维护唯一约束?
最佳答案
我认为 RunPython
该功能将为您提供帮助。
第一步。在添加 name_slug
之前,您已经有一个迁移文件字段。然后创建一个新的迁移文件,name_slug = models.CharField(max_length=255, unique=True,<b>null=True</b>)
.文件会是这样的
<强> app_name/migrations/0003_some_name.py
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sample', '0006_sessioncategory'),
]
operations = [
migrations.AddField(
model_name='sessioncategory',
name='name_slug',
field=models.CharField(max_length=255, null=True, unique=True),
),
]
from __future__ import unicode_literals
<p>from django.db import migrations, models
<b>from django.utils.text import slugify</b></p>
<p>class Migration(migrations.Migration):
def forwards_func(apps, schema_editor):
SessionCategory = apps.get_model("sample", "SessionCategory")
for instance in SessionCategory.objects.all():
if not instance.name_slug:
instance.name_slug = slugify(instance.name)
instance.save()</p>
<code>def reverse_func(apps, schema_editor):
pass</b>
dependencies = [
('sample', '0006_sessioncategory'),
]
operations = [
migrations.AddField(
model_name='sessioncategory',
name='name_slug',
field=models.CharField(max_length=255, null=True, unique=True),
),
<b>migrations.RunPython(forwards_func, reverse_func
)</b>
]</code></pre>
</code>
<br/><br/>
命令)
<strong>Step 3.</strong> do the migration by <code>python manage.py migrate</code><br/>
That's it !
<br/><br/><br/><br/>
<strong>Warning!</strong><br/>
<strong>do not run</strong> <code>python manage.py migrate</code> command on <strong>step 1</strong> (only makemigrations
注意
迁移文件是在我的本地系统中生成的,以重现该行为。它可能对您有所不同
关于python - 编写一个 Django 迁移,添加一个基于另一个字段的唯一字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51072426/
我最近开始从事一个 Sails 项目。它目前在迁移表下具有以下格式的迁移。 20160826122004-create_users_table.js 'use strict'; module.expo
当我尝试迁移时 doctrine:migrations:migrate ,我收到此异常:“元数据存储不是最新的,请运行 sync-metadata-storage 命令来解决此问题。”。这仅在尝试在生
我在 ec2 linux 7 上有一个 MarkLogic 服务器。我想将它迁移到 linux 6。我将 ebs 移动到新的 linux 6 并将其安装在 /var/opt/MarkLogic . 我
我对 OpenID 很好奇。虽然我同意统一凭证的想法很棒,但我有一些保留意见。什么是防止 OpenID 提供商发疯并持有他们拥有的 OpenID 帐户直到您支付 n 美元?如果我决定不喜欢这个提供商,
使用 SQL 很容易做到这一点,但我需要编写一个我不熟悉的 Knex 迁移脚本。以下代码在 order 表中行的末尾添加了 order_id 列。我想在 id 之后添加 order_id。我该怎么做?
使用 SQL 很容易做到这一点,但我需要编写一个我不熟悉的 Knex 迁移脚本。以下代码在 order 表中行的末尾添加了 order_id 列。我想在 id 之后添加 order_id。我该怎么做?
我想通过在 Yii2 中的迁移添加一个新列,使用以下代码: public function up() { $this->addColumn('news', 'priority', $this-
我正在尝试在 SQLDelight 的表中添加更多列。我做了一个迁移文件 1.sqm .在迁移文件中,它给出了找不到表的错误。 我的 build.gradle.kts: sqldelight {
我有一个与 Flyway DB 迁移相关的问题。通常如何管理处理相同 DB 模式的多个项目(微服务)。每个项目中的 Flyway 迁移脚本如果被其他项目修改,则不允许启动。他们是否有任何文档或最佳实践
我是 Laravel 的新手。我做了一份待办事项申请作为一项学校作业。我们必须使用迁移来创建我们的数据库。 我使用迁移创建了 2 个表。我的问题是:如果你第一次在你的电脑上运行这个项目,有没有办法自动
我正在尝试在 Laravel 中创建外键,但是当我使用 artisan 迁移表时,出现以下错误: [Illuminate\Database\QueryException] SQLSTATE[HY000
我从 Django 1.7 升级到 Django 1.9。我有多次迁移。升级后我无法再创建新的数据库。 问题是“django manage.py migrate”运行检查。检查导入应用程序 URL。这
我在创建数据迁移方面遇到了困难。我的应用程序使用两个数据库。我在 settings.py 中配置了数据库,并创建了一个像 Django docs 中一样的路由器. # settings.py DB_H
我有一个像这样的sql结构: CREATE TABLE resources ( id SERIAL PRIMARY KEY, title TEXT NOT NULL, created_at
我正在尝试使用模式构建器向表添加枚举选项(不丢失当前数据集)。 我真正能够找到的关于列更改的唯一信息是 http://www.flipflops.org/2013/05/25/modify-an-ex
我尝试转移到一些 CMake 程序中,并且有一个从 xml 生成头文件的函数。 生成文件.am adaptor_glue.hpp: dbus_introspect.xml $(DBUSXX_X
我想将文件移至我的 iOS 应用程序的 CoreData 存储 ../Library/Application Support/MyApp/ 至 ../Documents/Stores/ 我可以使用 N
有没有人对数据迁移进出 NetSuite 有丰富的经验?我必须将 DB2 表导出到 MySQL,处理数据,然后导出到一个 CSV 文件中。然后获取帐户的 CSV 文件并再次操作数据以使帐户从我们的旧系
我正在尝试在 Django 上建立一个博客。我已经走到了创建模型的地步。他们在这里: from django.db import models import uuid class Users(mode
我最近使用 bluehost 上的 AutoSSL 工具将网站迁移到 HTTPS。我在内容中看到一些失真,例如缺少背景颜色、表格位移、缺少_logos 等。 有谁知道 HTTPS 迁移效果如何影响样式
我是一名优秀的程序员,十分优秀!