【问题标题】:how to add another 0000n_initial.py file from makemigrations command如何从 makemigrations 命令添加另一个 0000n_initial.py 文件
【发布时间】:2020-03-02 11:03:41
【问题描述】:

我想从 makemigrations 文件中添加另一个 initial.py 文件

当我尝试 py manage.py makemigrations 它显示错误

您正在尝试在没有默认值的情况下向用户添加不可为空的字段“角色”;我们不能这样做(数据库需要一些东西来填充现有的行)。

请选择一个修复:

  1. 现在提供一次性默认值(将在所有现有行上设置此列的空值)

  2. 退出,让我在 models.py 中添加一个默认值

我想再做一个初始化来做一个依赖下拉

这是我在models.py中写的

import datetime

from django.db import models
from django.utils import timezone

class TableAll(models.Model):
    table_name = models.CharField(max_length=250)

这是 0001_initial.py 的代码

# Generated by Django 2.2.2 on 2019-10-29 03:52

from django.db import migrations, models
from django.contrib.auth.models import User
import django.db.models.deletion

class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    role = models.CharField(max_length=250)
    role.contribute_to_class(User,'role')    

    operations = [

        migrations.CreateModel(
            name='TableAll',
            fields=[                
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('table_name', models.CharField(max_length=250)),                
            ],
        ),

    ]



我想向另一个模型添加一个外键,并希望进行迁移以添加一个新的 00002_initial.py(例如),我想要这样的东西(这是我从 github 源代码中找到的代码)

新的初始文件 (0002_add_initial_data.py) //这只是 github 源代码中的一个示例,其中包含 0001_initial.py 和 0002_add_initial_data.py 以使依赖的下拉菜单起作用


class Migration(migrations.Migration):
    Country = apps.get_model('hr', 'Country')
    City = apps.get_model('hr', 'City')

    india = Country.objects.create(name='India')
    City.objects.create(name='Bengaluru', country=india)
    City.objects.create(name='Mumbai', country=india)
    City.objects.create(name='Chennai', country=india)
    City.objects.create(name='Hyderabad', country=india)
    City.objects.create(name='New Delhi', country=india)

    usa = Country.objects.create(name='United States')
    City.objects.create(name='New York', country=usa)
    City.objects.create(name='San Francisco', country=usa)
    City.objects.create(name='Los Angeles', country=usa)
    City.objects.create(name='Chicago', country=usa)
    City.objects.create(name='Seattle', country=usa)

    russia = Country.objects.create(name='Russia')
    City.objects.create(name='Moscow', country=russia)
    City.objects.create(name='Saint Petersburg', country=russia)
    City.objects.create(name='Yekaterinburg', country=russia)
    City.objects.create(name='Kazan', country=russia)
    City.objects.create(name='Krasnodar', country=russia)

    brazil = Country.objects.create(name='Brazil')
    City.objects.create(name='Sao Paulo', country=brazil)
    City.objects.create(name='Rio de Janeiro', country=brazil)
    City.objects.create(name='Belo Horizonte', country=brazil)
    City.objects.create(name='Curitiba', country=brazil)
    City.objects.create(name='Recife', country=brazil)

    uk = Country.objects.create(name='United Kingdom')
    City.objects.create(name='London', country=uk)
    City.objects.create(name='Huddersfield', country=uk)
    City.objects.create(name='Glasgow', country=uk)
    City.objects.create(name='Edinburgh', country=uk)
    City.objects.create(name='Cambridge', country=uk)

    dependencies = [
        ('hr', '0001_initial'),
    ]

    operations = [
        migrations.RunPython(add_initial_data),
    ]

感谢您的帮助,我是这个 django 框架的新手,我需要将它用于我的论文..

【问题讨论】:

    标签: django


    【解决方案1】:

    当不可为空的字段被添加到模型并且该字段的值是脚本的结果时,可以遵循一种模式。

    1. 将该字段添加到您的模型中,但使其可以为空 (null=True)
    2. 运行 makemigrations 以创建添加可空字段的迁移
    3. 使用migrations.RunPython 创建另一个填充此列的迁移 (makemigrations --empty)
    4. 从字段中删除 null=True 并再次运行 makemigrations。当提示选择时,选择 1“立即提供一次性默认值”并输入您喜欢的任何整数,因为所有行都应该已经有一个值,这无关紧要
    5. 迁移

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      相关资源
      最近更新 更多