gpt4 book ai didi

django - 基于仅在新版本中存在的字段的条件Django迁移

转载 作者:行者123 更新时间:2023-12-03 16:43:49 25 4
gpt4 key购买 nike

我的应用当前依赖于Postgres和Django的仅Postgres的JSONField。该领域运作良好,我对另一个项目没有兴趣,但是我有希望使用我的应用程序的潜在用户,但不能依赖于Postgres。
Django 3.1具有该领域的跨平台版本-可以满足我的需要-但是我不想强制所有人使用Django 3.1;我想为人们提供Postgres或Django 3.1+之间的选择。在纸面上,这很简单,只要有条件导入即可。

try:
from django.db.models import JSONField
except ImportError:
from django.contrib.postgres.fields import JSONField
如果我安装了Django 3.1并生成了迁移,则可能会将我从 django.contrib.postgres.fields.JSONField迁移到 django.db.models.JSONField。但...
  • 新用户仍将执行初始迁移。 我仍将依赖Postgres。
  • Sub-Django 3.1用户将无法执行新迁移。 我现在对Django 3.1有依赖性。

  • 这比我刚开始时差。如何以适合所有人的方式进行这种现场迁移?

    最佳答案

    迁移只是代码。仅因为它们是自动生成的,并不意味着您不应该更改它们。我们鼓励您至少检查它们是否正确生成,但是自己编写它们也没有害处。
    这对我有用:
    模型:

    from django.db import models

    try:
    from django.db.models import JSONField
    except ImportError:
    from django.contrib.postgres.fields import JSONField

    class MyModel(models.Model):
    stuff = JSONField()
    移民:
    from django.db import migrations, models

    try:
    from django.db.models import JSONField
    except ImportError:
    from django.contrib.postgres.fields import JSONField


    class Migration(migrations.Migration):
    dependencies = [('testapp', '0001_initial')]

    operations = [
    migrations.CreateModel(
    name='MyModel',
    fields=[
    ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
    ('stuff', JSONField()),
    ],
    ),
    ]

    请记住,如果将来需要更改此字段,则需要再次执行此过程。

    关于django - 基于仅在新版本中存在的字段的条件Django迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62751623/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com