Вычислить сотрудника с минимальным количеством заявок при сохранении формы
Имеются модели:
class Request(models.Model):
type = models.CharField('Тип', max_length=11, choices=WORK_TYPE, default=CODE)
theme = models.CharField('Тема', max_length=250)
executor = models.ForeignKey(Staff, on_delete=models.CASCADE, blank=True, null=True)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True, null=True)
priority = models.CharField('Приоритет', max_length=11, choices=WORK_PRIORITY, default=MIN)
desc = models.TextField('Описание', max_length=200, default='Задача: ')
status = models.CharField('Статус', max_length=26, choices=WORK_STATUS, default=IN_WORK)
date = models.DateTimeField('Дата', default=datetime.now)
class Staff(models.Model):
executor = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='staffacc')
first_name = models.CharField('Имя', max_length=250)
last_name = models.CharField('Фамилия', max_length=250)
department = models.CharField('Отдел', max_length=250)
contacts = models.CharField('Контакты', max_length=50)
Как подставить сотрудника из Staff, у которого минимальное количество заявок(executor в Request), при сохранении формы Ниже пытался сделать:
def request_form(request):
error = ''
if request.method == 'POST':
form = RequestsForm(request.POST)
if form.is_valid():
form = form.save(commit=False)
if form.type == 'Разработка':
min_reqs = Request.objects.annotate(num_reqs=Count('executor_id')).order_by('num_reqs').first()
work_type = Staff.objects.filter(department='Разработка', executor=min_reqs).order_by('?').first()
form.executor = work_type
form.author = request.user
form.save()
return redirect('home')
else:
error = 'Форма была неверной'
form = RequestsForm()
data = {
'form': form,
'error': error,
}
return render(request, 'main/form-req.html', data)
Ответы (1 шт):
Автор решения: ClutcherGG
→ Ссылка
min_reqs = Staff.objects.annotate(num_reqs=Count('request')).order_by('num_reqs').first() #сотрудник с минимальным количеством заявок
min_reqs = min_reqs.id #выборка его id
work_type = Staff.objects.filter(department='Разработка', id=min_reqs).first() #подстановка id
form.executor = work_type #подстановка в форму
Или в одну строку:
form.executor = Staff.objects.annotate(num_reqs=Count('request')).order_by('num_reqs').filter(department='Разработка').first()