Django 字段未迁移

0 投票
1 回答
45 浏览
提问于 2025-04-12 18:47

我有一个模型,每当创建一个对象时,我想要生成一个随机字符串,叫做 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 makemigrationspython 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

MariaDB 表结构

迁移文件:
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

撰写回答