Как заставить мой шаблон Django распознавать метод модели? - PullRequest
1 голос
/ 03 апреля 2020

В моем django шаблоне <p>This user is unsubscribed {{sub.is_unsubscribed}}</p> всегда отображается «Этот пользователь отписан Ложь», даже если он должен отображать «Истина» на основе следующих моделей .py

from django.shortcuts import get_object_or_404

class Subscriber(models.Model):
    email = models.CharField(max_length=12)
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    create_date = models.DateTimeField(auto_now_add=True)

    def is_unsubscribed(self):
        try:
            get_object_or_404(MasterUnsubscriber, unsubcriber_email=self.email)
            return True
        except:
            return False


    def __str__(self):
        return self.email

class MasterUnsubscriber(models.Model):
    unsubscriber_email= models.CharField(max_length=12)

И по структурным причинам моего приложения Я не хочу перемещать отписку к модели Subscriber как логическое значение. Как это можно решить, сохранив те же форматы моделей.

1 Ответ

1 голос
/ 03 апреля 2020

get_object_or_404 вызовет ошибку, если элемента вообще нет, или если таких элементов несколько, поскольку базовая реализация должна использовать .get(..). Вы можете использовать .exists() вместо:

class Subscriber(models.Model):
    # &hellip;

    def is_unsubscribed(self):
        return MasterUnsubscriber.objects.filter(unsubscriber_email=self.mail)<b>.exists()</b>

При этом я бы посоветовал использовать ForeignKey [Django -doc] абоненту, не сопоставляя адрес электронной почты. Это будет неэффективно, так как поиск по неиндексированному столбцу медленный, и, кроме того, если пользователь позже изменяет свою электронную почту, то внезапно они могут быть снова подписаны. Django также имеет удобные способы фильтрации или создания агрегатов для связанных объектов, поэтому вы получаете больше от Django ORM.

...