Поле Enum в MySQL

В MySQL существует несколько типов данных, char, varchar int, boolean, как вы уже знаете.

Но он также имеет тип Enum, что в SQL мы создаем таблицу следующим образом:

CREATE TABLE person(
  id int.....
  name varchar(50),
  
  and

   Married Enum(Yes,No)

)

Моя цель состоит в том, чтобы, когда я создаю модели в Django (Python), иметь возможность создавать таблицы в MySQL, я мог бы автоматически создавать и этот тип поля.

Я пробовал следующим образом:

from django.db import models
from enum import enum

class options(Enum):
    Yes = "Yes"
    No = "No"

class Customer(models.Model) :
                
    name = models.CharField(max_length=200)
    docto = models.CharField(max_length=14)
    age = models.IntegerField(default=0)
    username = models.CharField(max_length=20)
    password = models.CharField(max_length=20)
        
    block = models.CharField(
        max_length=3,
        choices=[(tag, tag.value) for tag in options],
        default= 'No'
    )
    
    def __str__(self):
        return self.name
        

Создание поля в MySQL создает, но создает как VARCHAR(3), а не как enum.

Может ли Django сделать это? Как это будет?

Мне бы не хотелось создавать таблицы непосредственно в базе данных,

В настоящее время на github есть пакет python под названием django-mysql, основанный на добавлении этих пакетов, хотя я не изучал, как именно они реализованы, но, прочитав документацию этой части пакета, я обнаружил, что он реализует поле enum на базе данных, вы можете посмотреть пример ниже, чтобы увидеть, как вы можете использовать этот пакет.

from django.db import models
from django_mysql.models import EnumField


class BookCoverColour(models.TextChoices):
    RED = "red"
    GREEN = "green"
    BLUE = "blue"


class BookCover(models.Model):
    colour = EnumField(choices=BookCoverColour.choices)
Вернуться на верх