Отображение суммы времени по проекту пользователем с использованием Django - PullRequest
0 голосов
/ 02 августа 2020

Я новичок в программировании. Я работаю над проектом по созданию функции хронометража. Я хочу иметь возможность отображать общее время, в течение которого пользователь работал над проектом. Мне удалось отобразить общее время для пользователя и общее время для проекта.

class User(models.Model):

class Project(models.Model):
    title = models.CharField(max_length=255)
    start_date = models.DateField()
    end_date = models.DateField()
    done = models.BooleanField(default=False)

    created_by = models.ForeignKey(User, related_name ='made_by', on_delete=models.CASCADE)
    projects_working_on = models.ManyToManyField(User, related_name = "projects_assigned_to")

class Timekeeper(models.Model):
    clock_in = models.DateTimeField(null=True)
    clock_out = models.DateTimeField(null=True)
    total_time = models.DurationField(null=True, blank=True)
    entire_time = models.FloatField(null=True)
    is_working = models.BooleanField(default=False)

    users_time = models.ForeignKey(User, related_name="time_of_user", on_delete=models.CASCADE)
    proj_time = models.ForeignKey(Project, related_name = 'time_of_project', on_delete=models.CASCADE)

Вот функция тайминга:

def clockout(request, proj_id):
    user = User.objects.get(id=request.session['userid'])
    now = datetime.now(timezone.utc)
    this_proj = Project.objects.get(id = proj_id)
    this_time = user.time_of_user.last()
    time = this_time.users_time
    this_time.clock_out = now
    this_time.is_working = False
    newtime = user.time_of_user.filter(proj_time=proj_id).aggregate(Sum('total_time'))
    # this_time.total_time_two = newtime
    this_time.save()
    Timekeeper.objects.update(total_time=F('clock_out') - F('clock_in'))
    Timekeeper.objects.update(entire_time=F('total_time'))
    Timekeeper.objects.update(total_time_two=newtime)
    # Timekeeper.objects.update(entire_time=user.time_of_user.filter(proj_time=proj_id).aggregate(Sum"(F('total_time')")
    return redirect('/dashboard/view/'+str(proj_id))

Поле all_time существует исключительно чтобы другая функция перебирала и находила время во всех полях для конкретного пользователя или проекта. Кажется, я не могу получить сумму total_times (или all_times) одного пользователя для конкретного проекта. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 02 августа 2020

Отвечая на свой пост, я нашел работоспособное решение: хотя и не самое элегантное.

class Timekeeper(models.Model):
    clock_in = models.TimeField(null=True)
    clock_out = models.TimeField(null=True)
    total_time = models.FloatField(null=True, blank=True)
    entire_time = models.FloatField(null=True)
    user_total_time = models.FloatField(null=True, blank=True)
    user_project_total_time = models.FloatField(null=True, blank=True)
    is_working = models.BooleanField(default=False)
    users_time = models.ForeignKey(User, related_name="time_of_user", on_delete=models.CASCADE)
    proj_time = models.ForeignKey(Project, related_name = 'time_of_project', on_delete=models.CASCADE)

В views.py

def clockout(request, proj_id):
    user = User.objects.get(id=request.session['userid'])
    this_time = user.time_of_user.last()
    total_time_of_user = 0
    total_time_of_user_project = 0
    for i in user.time_of_user.all():
        total_time_of_user += i.total_time
        this_time.user_total_time = total_time_of_user
        this_time.save()
    for x in user.time_of_user.filter(proj_time=proj_id).all():
        total_time_of_user_project += x.total_time
        this_time.user_project_total_time = total_time_of_user_project
        this_time.save()

Это создает 2 новых атрибута для Модель хронометриста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...