Отдельная модель для хранения выбора против поля Choices в модели Django

В настоящее время я реализовал статус как отдельную модель следующим образом

class OrderStatus(models.Model):
    name = models.CharField(max_length=200)

class Order(models.Model):
        status = models.ForeignKey(OrderStatus, on_delete=models.CASCADE, null=True, blank=True)

но я только что понял, что в Django есть поле под названием "choices". Django docs: https://docs.djangoproject.com/en/2.2/ref/models/fields/#choices

Основываясь на этой документации Django, я думаю, что моя модель должна быть такой:

class Order(models.Model):
    UNPAID = 'UNPAID'
    PAID = 'PAID'
    ORDER_STATUS_CHOICES = [
        (UNPAID, 'UNPAID'),
        (PAID, 'PAID'),
    ]
    status = models.CharField(
        max_length=2,
        choices=ORDER_STATUS_CHOICES,
        default=UNPAID,
    )

Используя это, я думаю, что мне больше не нужна отдельная модель под названием "OrderStatus".

Вот мои вопросы.

  1. Is there any downside if I keep my implementation?
  2. If I change/refactor my code to use the "choices" field. Can I add more status in the future? do I only have to add more items in the ORDER_STATUS_CHOICES variable? Are there other things that I have to do?

Да, вы можете добавить столько вариантов, сколько захотите. Вы можете использовать django enum, чтобы сделать happens

Вот как вы можете его использовать:

https://docs.djangoproject.com/en/3.2/ref/models/fields/#enumeration-types

Каждый раз, когда вы добавляете новый элемент выбора в свой enum класс, убедитесь, что у вас есть команды make migrations

Вернуться на верх