Обновить current_week из шаблона в Django - PullRequest
0 голосов
/ 29 мая 2020

Я создал инструмент планирования для планирования действий стандартной продолжительности. Общее количество продолжительностей суммируется за неделю и извлекается из цели недельного планирования. Цель еженедельного планирования основана на контракте с недельными часами (см. Model.py). На данный момент я показываю все планы на текущую неделю в таблице в моем шаблоне и вычисляю остаток (цель планирования - запланированный) на основе текущей недели. Я хочу, чтобы пользователь мог переключиться на предыдущую и будущую недели, и я хочу, чтобы запланированный и рассчитанный остаток переключался вместе с ним. Я пытался сделать это через форму (не знаю, как создать для этого правильную форму) и через django_filters. Django_filters работает с таблицей, но не корректирует сумму недельного планирования и остатка на нужную неделю. Также я еще не знаю, как разрешить пользователю выбирать неделю в фильтре.

В основном я хочу, чтобы пользователь делал next_week = current_week + 1 или prev_week = current_week - 1 одним щелчком по кнопке. После щелчка current_week = next / prev_week.

Я новичок в django и кодировании в целом, и я не знаю, как двигаться дальше.

models.py

class PlanningActivity(models.Model):
    name = models.CharField(max_length=255)
    is_billable = models.BooleanField()
    is_auto_realised = models.BooleanField()
    strd_duration = models.PositiveIntegerField() 

    def __str__(self):
        return self.name


class Planning(models.Model):
    added_by = models.ForeignKey(
        User, related_name='planning_activity', on_delete=models.DO_NOTHING
    )
    activity = models.ForeignKey(
        PlanningActivity, on_delete=models.DO_NOTHING
    )
    date = models.DateField()
    note = models.CharField(max_length=255, blank=True)

    def __str__(self):
        return str(self.id)


class UserContract(models.Model):
    assigned_user = models.ForeignKey(
        User, on_delete=models.DO_NOTHING
    )
    organisation = models.CharField(max_length=255)
    function = models.CharField(max_length=255)
    team = models.CharField(max_length=255)
    hrs_per_week = models.PositiveIntegerField()
    planning_target = models.PositiveIntegerField()
    beginning_date = models.DateField()
    ending_date = models.DateField()

    @property
    def Target(self):
        return (self.hrs_per_week * (self.planning_target/100))

    def __str__(self):
        return str(self.assigned_user)

views.py

def home(request):
    current_week = date.today().isocalendar()[1]
    next_week = current_week + 1

    planning_form = PlanningForm(request.POST)


    if request.user.is_authenticated:
        planning = Planning.objects.filter(added_by=request.user, date__week=current_week).select_related('activity').order_by('-date')

        total_planned_current_week = Planning.objects.filter(added_by=request.user, date__week=current_week).select_related('activity').aggregate(Sum('activity__strd_duration'))['activity__strd_duration__sum']
        total_planned = Planning.objects.filter(added_by=request.user).select_related('activity').aggregate(Sum('activity__strd_duration'))['activity__strd_duration__sum']

        week_filter = PlanningFilter(request.GET, queryset=planning)
        planning = week_filter.qs

        contracts = UserContract.objects.filter(assigned_user=request.user)

        # TEMP FIX - ONLY 1 CONTRACT ALLOWED FOR NOW - NEED TO SET EXPIRE DATE IN CONTRACT TO SHOW THE VALID CONTRACT
        if total_planned == None:
            return redirect('/first_planning')

        elif total_planned_current_week == None:
            total_planned_current_week = 0
            for contract in contracts:
                remainder = contract.Target - total_planned_current_week

        else:
            for contract in contracts:
                remainder = contract.Target - total_planned_current_week            

    else:
        planning = ''
        contracts = ''
        total_planned_current_week = 0
        remainder = 0
        week_filter = ''

    if request.method == 'POST':
        if planning_form.is_valid():
            new_planning = planning_form.save(commit=False)
            new_planning.added_by = request.user
            new_planning.save()
            return redirect('/')

        else:
            planning_form = PlanningForm()

    return render(request, 'home.html', {'planning_form': planning_form, 'planning':planning,
        'contracts':contracts, 'total_planned_current_week':total_planned_current_week, 'remainder': remainder, 'week_filter': week_filter})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...