Как передать контекстную переменную одной функции в другую функцию в django, или какой хороший метод вместо сессии для этого?

views.py

    def contest(request):
        context = {}
        all_contest = Contest.objects.all()        
        context["contest"] = all_contest
        return render(request,"contest.html",context)
    
    def contest_candidates(request,id):
        context = {}
        all_candidates_ = Contest_Candidates.objects.filter(contest_id = id)
        high_like = 0
        winner_ = ""
        for i in all_candidates_:
    
            if i.likes_count > high_like:
                high_like = high_like + i.likes_count
                winner_ = i.owner.name
    
        context["cadidates"] = all_candidates_
    
        return render(request,"view_contest_candidates.html",context)

urls.py

path("contest",views.contest, name="contest"),
path("candidates/<id>",views.view_contest_candidates, name="candidates"),

models.py

class Contest(models.Model):
    title = models.CharField(max_length=50)

class Contest_Candidates(models.Model):
    image = models.FileField( upload_to="contest_candidates/",)
    owner = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
    contest = models.ForeignKey(Contest, on_delete=models.CASCADE,related_name='candidates')

    @property
    def likes_count(self):
       return self.likes.all().count() 

class CandidateLikes(models.Model):
    like = models.CharField(max_length=10)
    user = models.ForeignKey(CustomUser,on_delete=models.CASCADE,related_name='candidate_likes')
    contest_candidates = models.ForeignKey(Contest_Candidates, on_delete=models.CASCADE, related_name='likes')

как передать переменную winner в функцию contest? Мне нужно показать это в contest.html

если это невозможно, какой лучший метод . хочу показать каждого победителя конкурса в contest.html

Насколько я понимаю - winner переменная вычисляется в вашей второй функции.

Ничто не мешает вычислить его и в contest:

models.py

class Contest(models.Model):
    title = models.CharField(max_length=50)

    @property
    def winner(self):
     high_like = 0
     all_candidates_ = Contest_Candidates.objects.filter(contest=self)
     winner = None
     for c in all_candidates_:
         if c.likes_count > high_like:
             winner = c.owner
     return winner

views.py

def contest(request):
    context = {"contests": Contest.objects.all()}
    
    return render(request,"contest.html",context)

def contest_candidates(request,id):
    contest = Contest.objects.get(id=id)
    context = {
        "contest": contest,
        "candidates": Contest_Candidates.objects.filter(contest=contest)
    }

    return render(request,"view_contest_candidates.html",context)

конкурс.html

{% for c in contests %}
    {{ c.title }}
    {{ c.winner.name }}
{% endfor %}
Вернуться на верх