Как отобразить поле внешнего ключа в Django

# Models

class Vote(models.Model):
    """
    A Class for Votes made by Users for a specific Poller
    """
    poller = models.ForeignKey(Poller, on_delete=models.CASCADE, related_name='vote')
    user = models.ForeignKey(Account, on_delete=models.CASCADE)
    created_on = models.DateTimeField(auto_now_add=True)
    poller_choice_one_vote = models.BooleanField(default=False)
    poller_choice_two_vote = models.BooleanField(default=False)

    def __str__(self):
        return f'Vote by {self.user}'


class PollerComment(models.Model):
    poller = models.ForeignKey(Poller, on_delete=models.CASCADE, related_name='PollerComment')
    user = models.ForeignKey(Account, on_delete=models.CASCADE)
    vote = models.ForeignKey(Vote, on_delete=models.RESTRICT, default=1)
    created_on = models.DateTimeField(auto_now_add=True)
    comment = models.TextField(max_length=350)

    def get_vote(self):
        """
        Get the vote made to the Poller
        of the user who commented
        """
        self.vote_made = ''
        if self.vote.poller_choice_one_vote:
            self.vote_made = 'One'
        else:
            self.vote = 'Two'
        return self.vote_made
# View

@require_GET
def render_single_poller(request, poller_id):

    # Retrieve comments
    comments_qs = PollerComment.objects.filter(poller_id=poller_id)

context = {
        'comments_qs': comments_qs,
    }
    return render(request, 'pollboard/single_poller.html', context)
# Template

{% for comment in comments_qs %}

<div class="comment-choice">{{ comment.get_vote }}</div>

{% endfor %}

Я пытаюсь отобразить Vote, сделанные пользователем в его PollerComment, которые связаны через поле ForeignKey. Я пытался применить метод Model в шаблоне, но почему-то он ничего не отображает и не выдает ошибку. Я не уверен, что значительно усложнил простую вещь.

Попробуйте вот это:

def get_vote(self):
        """
        Get the vote made to the Poller
        of the user who commented
        """
        self.vote_made = ''
        if self.vote.poller_choice_one_vote==True:
            self.vote_made = 'One'
        else:
            self.vote = 'Two'
        return self.vote_made

Если пользователь может проголосовать на опроснике только один раз, вы можете фильтровать с помощью:

@register.filter(name='get_vote')
def get_voted(self):
    vote = Vote.objects.get(poller=self.poller, user=self.user)
    return 'One' if vote.poller_choice_one_vote else 'Two'
Вернуться на верх