Как создать таблицы модели в MySQL?

Я пытаюсь воспроизвести проект PHP/Symfony в Python/Django в качестве упражнения по изучению python. Платформа = Windows 10. Ожидается, что команда migrate добавит таблицы, связанные со всеми записями в settings.py INSTALLED_APPS{...}. Вместо этого команда migrate добавляет все таблицы Django, но ни одной таблицы из models.py.

Что тогда нужно сделать, чтобы позволить migrate добавить 5 таблиц MySQL?

Результат:

mysql> use diet_py;
Database changed
mysql> show tables;
+----------------------------+
| Tables_in_diet_py          |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+

Следуя документации учебника Django, с небольшими изменениями, у меня есть следующие каталоги & файлы:

Tree:

...DB1-PROJECT
│   db.sqlite3
│   manage.py
│
├───diet
│   │   admin.py
│   │   apps.py
│   │   models.py
│   │   tests.py
│   │   views.py
│   │   __init__.py
│   │
│   ├───migrations
│   │   │   __init__.py
│   │   │
│   │   └───__pycache__
│   │           __init__.cpython-311.pyc
│   │
│   └───__pycache__
│           admin.cpython-311.pyc
│           apps.cpython-311.pyc
│           models.cpython-311.pyc
│           __init__.cpython-311.pyc
│
└───mysite
    │   asgi.py
    │   settings.py
    │   urls.py
    │   wsgi.py
    │   __init__.py
    │
    └───__pycache__
            settings.cpython-311.pyc
            urls.cpython-311.pyc
            wsgi.cpython-311.pyc
            __init__.cpython-311.pyc

..\diet\models.py

from django.db import models

# Create your models here.
from django.db import models


class Food(models.Model):
    food_name = models.CharField(max_length=255)

    class Meta:
        db_table = 'food'


class Gut(models.Model):
    description = models.CharField(max_length=255, blank=True, null=True)
    datetime = models.DateTimeField()
    reaction_id = models.IntegerField()

    class Meta:
        db_table = 'gut'


class Meal(models.Model):
    meal_type = models.CharField(max_length=255)
    date = models.DateTimeField()

    class Meta:
        db_table = 'meal'


class MealFood(models.Model):
    meal = models.OneToOneField(Meal, models.DO_NOTHING, primary_key=True)
    food = models.ForeignKey(Food, models.DO_NOTHING)

    class Meta:
        db_table = 'meal_food'
        unique_together = (('meal', 'food'),)


class Reaction(models.Model):
    reaction = models.CharField(max_length=45)

    class Meta:
        db_table = 'reaction'

...\mysite\settings.py

from pathlib import Path
import pymysql

pymysql.install_as_MySQLdb()
...
INSTALLED_APPS = [
    'diet.apps.DietConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
...
DATABASES = {
        'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'diet_py',
        'USER': 'username',
        'PASSWORD': 'password',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}
...

после завершения кода модели необходимо выполнить команду makemigrations в CLI

python manage.py makemigrations

Когда вы запустите эту команду, вы сможете увидеть изменения и дополнения, которые вы создали в командной строке, что-то вроде следующего

diet/migrations/0001_initial.py
- Create model Food

если это не сработало. Попробуйте выполнить команду migrate с именем приложения в качестве параметра, как показано ниже

python manage.py makemigrations diet
Вернуться на верх