Я планировал написать базовое приложение часов-часов/часов для отслеживания рабочего времени с использованием Django. Сейчас мой код работает (запуск/остановка сдвига или пауза), но я не использую ModelForms или ModelManager. Весь бизнес-код находится внутри моих представлений и файла services.py, это не похоже на правильный путь.Менеджеры Django, ModelForms и некоторая путаница
Я попытался прочитать в ModelManager и ModelForms, но я думаю, что это просто сбило меня с ума.
Скажем, у меня есть модель WorkTime:
class WorkTime(models.Model):
employee = models.ForeignKey(User)
created_at = models.DateTimeField(auto_now_add=True)
shift_started = models.DateTimeField()
shift_finished = models.DateTimeField(blank=True, null=True)
shift_duration = models.DurationField(blank=True, null=True)
work_reason = models.TextField(null=True)
теперь я хочу иметь две возможности:
- пользователь может начать свою смену, посетив определенный вид (/ часы/старт /) , Добавляется только время начала.
- Пользователь посещает окно остановки (/ clock/stop /), чтобы завершить его текущий сдвиг, время окончания добавлено в соответствующую строку.
- Пользователь добавляет свою смену вручную после ее завершения, поэтому добавляет время начала и окончания.
Как мой код прямо сейчас, это не настоящая красота и определенно не сухая. Как я могу решить проблему наиболее умным способом, например, определить ONE ModelForm, который подходит для всех возможных случаев (просто запустите новый сдвиг, завершите смену (только путем доступа к представлениям в браузере) или добавьте всю смену вручную с помощью HTML- форма). Или я бы разделил его на то, чтобы иметь ModelManager, который делает стартовую/остальную часть сдвига и ModelForm для ручного добавления shits в качестве фактической HTML-формы?
спасибо! Еще один вопрос: почему я должен добавить 'created_at' в поля, так как это опция auto_now_add = True в модели. Разве это не было бы лишним? –
Прости, плохо. Этого не должно быть здесь. – GwynBleidD
Я еще не двигался дальше. Для моего приложения я хочу, чтобы у пользователя было два способа начать его смену. a) Нажмите кнопку, которая теперь отправляет форму и начинает смену b) Заполните форму вручную со всеми данными (время начала и окончания) Я думал, что могу использовать тот же CreateView/ModelForm для этого , но я не могу преодолеть процесс проверки. Если пользователь просто нажимает кнопку, тогда обычно время начала не отправляется (поскольку его не указывается, пользователь просто нажимает кнопку!). Теперь я хотел бы добавить start_time вручную в представление, но я думаю, что я потерялся. –