@coalesce

Как создать класс типа DateTimeField со своими настройками?

У модели много полей типа ДатаВремя
models.py
class Order(models.Model):
    ...
    dt_receipt = models.DateTimeField(blank=True, null=True, verbose_name='...')
    dt_work_begin = models.DateTimeField(blank=True, null=True, verbose_name='...')
    dt_work_end = models.DateTimeField(blank=True, null=True, verbose_name='...')
    dt_delay = models.DateTimeField(blank=True, null=True, verbose_name='...')
    dt_leave = models.DateTimeField(blank=True, null=True, verbose_name='...')
    dt_arrive = models.DateTimeField(blank=True, null=True, verbose_name='...')
    ...


На форме приходится писать много повторяющегося кода:

forms.py
dt_receipt = forms.DateTimeField(required=False, widget=DateInput(attrs={'type': 'datetime-local'}),
                                        initial=format(datetime.date.today(), '%Y-%m-%dT%H:%M'), localize=True,
                                        input_formats=['%Y-%m-%dT%H:%M'])
    # и тоже самое для оставщихся 5 полей класса.


Чтобы не писать повторяющийся код, я создал свой класс MyDateTimeField с нужными мне параметрами.
И пытаюсь его использовать

forms.py
class MyDateTimeField(forms.DateTimeField):
    widget = DateInput(attrs={'type': 'datetime-local'})
    input_formats = ['%Y-%m-%dT%H:%M']
    initial = format(datetime.date.today(), '%Y-%m-%dT%H:%M')
    localize = True
    required = False

class OrderForm(forms.ModelForm):
    class Meta:
        model = Order

    dt_receipt = MyDateTimeField(label='...')


Однако при таком способе удалось переопределить только параметры widget и input_formats
Что касается initial и required - они берут значения по-умолчанию из DateTimeField а не из моего класса MyDateTimeField.
Как проверить какое значение у localize не знаю.

Вопрос:
Можно ли (как) создать свой класс на основе DateTimeField таким образом, чтобы значения по-умолчанию для параметров initial, required и localize брались из собственного класса?

Цель: писать поменьше повторяющегося кода.
  • Вопрос задан
  • 277 просмотров
Решения вопроса 1
Нужно переопределить `__init__` и там уже проставить свои значения по умолчанию.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект