Отдельная модель для хранения выбора против поля 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".
Вот мои вопросы.
- Is there any downside if I keep my implementation?
- 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