Django 字段未迁移
我有一个模型,每当创建一个对象时,我想要生成一个随机字符串,叫做 activation
。
我现在是这样创建这个模型的:
from django.db import models
from django.contrib.auth.models import User
from django.utils.translation import gettext_lazy as _
import string
import random
def get_random_12_string():
return ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase + string.digits, k=12))
class Client(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='customer')
organization = models.ForeignKey(Organization, on_delete=models.CASCADE, related_name='clients')
phone_number = models.CharField(_("Phone Number"), max_length=15)
date_of_birth = models.DateField(_("Date of Birth"), blank=True, null=True) # Optional
created_at = models.DateTimeField(_("Created At"), auto_now_add=True)
updated_at = models.DateTimeField(_("Updated At"), auto_now=True)
activation = models.CharField(_("Activation Code"), max_length=14, default=get_random_12_string)
def __str__(self):
return f'{self.user.first_name} {self.user.last_name}'
class Meta:
verbose_name = _("Customer")
verbose_name_plural = _("Customers")
ordering = ['created_at'] # Orders by creation date by default in queries.
但是在运行了 python manage.py makemigrations
和 python manage.py migrate
之后(这两个命令都显示成功),这个字段在数据库里根本没有被创建。而当我去管理面板时,出现了一个错误,提示这个字段不存在。
Migrations for 'portal':
portal\migrations\0005_alter_client_activation.py
- Alter field activation on client
Operations to perform:
Apply all migrations: admin, api, auth, contenttypes, cookie_consent, portal, public, sessions, sites
Running migrations:
Applying portal.0005_alter_client_activation... OK
迁移文件:
001_initial.py
# Generated by Django 3.2.23 on 2024-03-26 04:18
import datetime
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import portal.models
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Client',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('phone_number', models.CharField(max_length=15, verbose_name='Phone Number')),
('date_of_birth', models.DateField(blank=True, null=True, verbose_name='Date of Birth')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')),
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')),
('activation', models.CharField(default=portal.models.get_random_12_string, max_length=14, verbose_name='Activation Code')),
],
options={
'verbose_name': 'Customer',
'verbose_name_plural': 'Customers',
'ordering': ['created_at'],
},
),
migrations.AddField(
model_name='client',
name='organization',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='clients', to='portal.organization'),
),
migrations.AddField(
model_name='client',
name='user',
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='customer', to=settings.AUTH_USER_MODEL),
),
]
1 个回答
0
不过在运行了命令 python manage.py makemigrations 和 python manage.py migrate 之后(这两个命令都显示成功),结果数据库里连字段都没有创建。而当我去管理面板时,出现了一个错误,提示这个字段不存在。
在迁移命令后面加上你的应用名称。
比如:
python manage.py makemigrations your_app_name
python manage.py migrate your_app_name