Django:0001_initial.py在补充www.example.com后不是当前状态models.py

igetnqfo  于 2023-01-18  发布在  Go
关注(0)|答案(2)|浏览(116)

我是Django/python的新手,我的models.py遇到了一个问题。我添加了一些属性,保存了它-〉py www.example.com makemigrations-〉py manage.py migrate,但是当前的属性没有显示在0001_initial. py中。另外,当我在SQLite的DB Browser中打开数据库时,我仍然得到旧的状态。manage.py makemigrations -> py manage.py migrate but the current attributes are not shown in the 0001_initial.py. Also when I am opening the database in my DB Browser for SQLite I still get the old status.
下面是我的代码:
models.py

from django.db import models

# from django.contrib.auth.models import User

# Create your models here.
    category_choice = (
        ('Allgemein', 'Allgemein'),
        ('Erkältung', 'Erkältung'),
        ('Salben & Verbände', 'Salben & Verbände'),
    )

class medicament(models.Model):
    PZN = models.CharField(max_length=5, primary_key=True) # Maxlaenge auf 5 aendern
    name = models.CharField('Medikament Name', max_length=100)
    description = models.CharField('Medikament Beschreibung', max_length=500)
    category = models.CharField(max_length=100, blank=True, null=True, choices=category_choice)
    instructionsForUse = models.CharField('Medikament Einnehmhinweise', max_length=400)
    productimage = models.ImageField(null=True, blank=True, upload_to="images/")
    stock = models.PositiveIntegerField(default='0')
    reorder_level = models.IntegerField(default='0', blank=True, null=True)
    price= models.DecimalField(default='0.0', max_digits=10, decimal_places=2)
    sold_amount = models.IntegerField(default='0', blank=True, null=True)
    sales_volume =  models.DecimalField(default='0.0', max_digits=10, decimal_places=2)

    def __str__(self):
        return self.name

以及0001初始值. py

# Generated by Django 3.2.16 on 2023-01-05 14:33

from django.db import migrations, models

class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='medicament',
            fields=[
                ('PZN', models.CharField(max_length=5, primary_key=True, serialize=False)),
                ('name', models.CharField(max_length=100, verbose_name='Medikament Name')),
                ('description', models.CharField(max_length=500, verbose_name='Medikament   Beschreibung')),
                ('category', models.CharField(default='Allgemein', max_length=100)),
                ('instructionsForUse', models.CharField(max_length=400, verbose_name='Medikament Einnehmhinweise')),
                ('productimage', models.ImageField(blank=True, null=True, upload_to='images/')),
                ('stock', models.IntegerField(default='0')),
            ],
        ),
    ]
cunj1qz1

cunj1qz11#

首先是一个基本的解释,下面是对您的具体情况的回答
有2个步骤:
1.“makemigrations”扫描您的代码,查找模型中的更改,并根据更改创建迁移文件,如

001_initial.py
002_auto_xyz.....py

有一个初始文件,然后后续的迁移文件有一个运行编号,并依赖于彼此,你可以看到在文件中,例如。

dependencies = [
        ('users', '0003_auto_20210223_1655'),
    ]

一旦创建了迁移文件,它将不再更改,并且在执行新的makemigration之后,代码中的所有后续修改将反映在新的附加迁移文件中。
1.“migrate”将获取创建的迁移文件,检查您的数据库中哪些迁移已应用于此特定数据库(!),并应用一次挂起的迁移。在数据库中创建了一个表,用于存储有关已应用迁移的信息。
这意味着,例如,您可以在开发服务器上的数据库上运行迁移,并且独立于在生产服务器上的数据库上运行迁移。这两个迁移命令都将读取现有迁移文件并在数据库中执行迁移。
因此,如果您创建了一个初始模型-〉makemigrations -〉migrate,您将看到一个001_initial.py迁移文件。
如果您对模型进行更改-〉再次进行迁移-〉再次进行迁移,您应该只会在002_... migrations文件中找到更改,并且还会在数据库中找到更改。

fwzugrvs

fwzugrvs2#

在任何Django项目中,你只能运行一次makemigrations(在你的模型的第一次初始化时),之后你可以运行ONLY migrate for any updates
至于您的问题,您应该删除SQLite DB,并删除所有以. py结尾的迁移文件。
之后运行makemigrations,然后迁移(不要再次运行makemigrations,原因是它会导致问题,并与基于以前makemigrations的旧SQL迁移冲突)。

相关问题