Поле 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),
),
]
Однако после запуска python manage.py makemigrations & python manage.py migrate (оба говорят, что они успешны). Поле даже не создается в базе данных, а при переходе в панель администратора я получаю ошибку, что поле не существует.
добавьте название вашего приложения после команд миграции.
e.g
python manage.py makemigrations your_app_name
python manage.py migrate your_app_name