Как я могу получить объект из другой функции в Django - PullRequest
0 голосов
/ 05 июля 2019

У меня есть две функции projectTimerStart для запуска таймера и projectTimerStop я хочу использовать объект, созданный в projectTimerStart, и хочу завершить время, когда projectTimerStop, и это должно быть сохранено в базе данных

пс: обе функции не в классе, они нормальные функции

def projectTimerStart(request, slug):
    project_detail = Project.objects.get(slug=slug)
    b = ProjectTimer(time_started=datetime.now(),
    working_project=project_detail,
    working_freelancer=request.user
    )
    b.save()
    return HttpResponseRedirect(reverse('project_timer', kwargs= 
           {"slug":slug}))


def projectTimerStop(request,  slug):
    project_detail = Project.objects.get(slug=slug)
    #i want something here super method or something
    return HttpResponseRedirect(reverse('project_timer', kwargs=
           {"slug": slug}))

models.py

class Project(models.Model):

    project_title = models.CharField(max_length=100)
    project_description = models.TextField()
    created_by = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name='created')
    assigned_to = models.ManyToManyField(
        User, blank=True, related_name='assigned_by')
    slug = models.SlugField()
    hourly_budget = models.PositiveIntegerField(blank=True, null=True)
    technologies = models.ManyToManyField(
    Technologies, related_name='technologies_used')
    time_posted = models.DateTimeField(auto_now_add=True)
    request_id = models.ManyToManyField(
        User, related_name='requested_by', blank=True)

    def __str__(self):
        return self.project_title

    def save(self, *args, **kwargs):
        self.slug = slugify(self.project_title)
        super(Project, self).save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('project_detail', kwargs={'slug': self.slug})

    def get_timer_url(self):
        return reverse('project_timer', kwargs={'slug': self.slug})


    def round_datetime(dt):
        minutes = round((dt.minute + float(dt.second) / 60) / 15) * 15 - 
        dt.minute
        return dt + datetime.timedelta(minutes=minutes, seconds=-dt.second)


class ProjectTimer(models.Model):
    time_started = models.DateTimeField()
    time_ended = models.DateTimeField(blank=True, null=True)
    working_project = models.ForeignKey(Project, on_delete=models.CASCADE)
    working_freelancer = models.ForeignKey(
        User, on_delete=models.CASCADE, blank=True, null=True)

1 Ответ

1 голос
/ 05 июля 2019

Если каждый из ваших объектов проекта будет иметь один и только объекты таймера проекта, вы можете добавить project_timer = models.OneToOneField(ProjectTimer) к вашей модели Project и получить доступ к таймеру проекта с помощью project_detail.project_timer.

Если нет, вам нужно знать хотя бы одну особенность этого project_timer, чтобы извлечь его из базы данных. Или вы можете перебрать все свои ProjectTimer объекты, которые принадлежат этому Project, и выбрать подходящий по:

models.py

class Project(models.Model):
    # Some fields
    project_timers = models.ManyToManyField(ProjectTimer)

views.py

def projectTimerStop(request,  slug):
    project_detail = Project.objects.get(slug=slug)
    for pt in project_detail.project_timers.all():
        if pt.some_field == "THIS IS CORRECT TIMER":
            # Here is your project_detail
            print(str(pt))
    return HttpResponseRedirect(reverse('project_timer', kwargs=
           {"slug": slug}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...