@flexpc

Как выбирать обязательные поля в модели?

class Order(models.Model):
    anonymous = models.BooleanField(verbose_name='Аноним')
    user = models.ForeignKey(User, on_delete = models.PROTECT, verbose_name = 'Заказчик')
    name = models.CharField(max_length=255, verbose_name='Имя')
    surname = models.CharField(max_length=255, verbose_name='Фамилия')
    patronymic = models.CharField(max_length=255, verbose_name='Отчество', blank=True)
    phone = models.CharField(max_length=14, verbose_name='Номер телефона')
    email = models.EmailField(verbose_name='Почта')
    date_create = models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')
    address = models.OneToOneField(Address, on_delete = models.PROTECT, verbose_name='Адрес')
    date_delivery = models.DateTimeField(verbose_name='Время доставки')
    payment_method = models.ForeignKey(PaymentMethod, on_delete = models.PROTECT, verbose_name = 'Способ оплаты')
    status = models.ForeignKey(OrderStatus, on_delete = models.PROTECT, verbose_name = 'Статус')
    promotional_code = models.ForeignKey(PromotionalCode, on_delete = models.PROTECT, verbose_name = 'Промокод')
    cutlery = models.PositiveSmallIntegerField(verbose_name='Количество столовых приборов')
    comment = models.TextField(verbose_name = 'Комментарий')

    class Meta:
        verbose_name = 'Заказ'
        verbose_name_plural = 'Заказы'

Имею такую модель. Сервис подразумевает что заказ можно сделать без регистрации, в таком случае пользователь должен указать name, surname, patronymic, phone, так же в таком случае anonymous будет true, а user будет null
Если пользователь зарегистрирован, то поле anonymous будет false, а user будет содержать id аккаунта, а поля name, surname, patronymic, phone будут оставаться пустыми, как реализовать такое в модели? Или проще сделать все поля необязательными и регулировать этот момент на уровне фронтенда?
  • Вопрос задан
  • 51 просмотр
Пригласить эксперта
Ответы на вопрос 1
@Everything_is_bad
в таком случае пользователь должен указать name, surname, patronymic, phone
ну так создай автоматически такого юзера и не будешь тогда извращаться со сложной валидацией

Либо создай абстрактную модель BaseOrder туда вынеси все общие поля для заказа, а от нее AnonymousOrder и UserOrder со специфичными полями
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы