我是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')),
],
),
]
2条答案
按热度按时间cunj1qz11#
首先是一个基本的解释,下面是对您的具体情况的回答
有2个步骤:
1.“makemigrations”扫描您的代码,查找模型中的更改,并根据更改创建迁移文件,如
有一个初始文件,然后后续的迁移文件有一个运行编号,并依赖于彼此,你可以看到在文件中,例如。
一旦创建了迁移文件,它将不再更改,并且在执行新的makemigration之后,代码中的所有后续修改将反映在新的附加迁移文件中。
1.“migrate”将获取创建的迁移文件,检查您的数据库中哪些迁移已应用于此特定数据库(!),并应用一次挂起的迁移。在数据库中创建了一个表,用于存储有关已应用迁移的信息。
这意味着,例如,您可以在开发服务器上的数据库上运行迁移,并且独立于在生产服务器上的数据库上运行迁移。这两个迁移命令都将读取现有迁移文件并在数据库中执行迁移。
因此,如果您创建了一个初始模型-〉makemigrations -〉migrate,您将看到一个001_initial.py迁移文件。
如果您对模型进行更改-〉再次进行迁移-〉再次进行迁移,您应该只会在002_... migrations文件中找到更改,并且还会在数据库中找到更改。
fwzugrvs2#
在任何Django项目中,你只能运行一次makemigrations(在你的模型的第一次初始化时),之后你可以运行ONLY migrate for any updates。
至于您的问题,您应该删除SQLite DB,并删除所有以. py结尾的迁移文件。
之后运行makemigrations,然后迁移(不要再次运行makemigrations,原因是它会导致问题,并与基于以前makemigrations的旧SQL迁移冲突)。