Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让Django模板识别模型方法?_Django_Django Models_Django Templates - Fatal编程技术网

如何让Django模板识别模型方法?

如何让Django模板识别模型方法?,django,django-models,django-templates,Django,Django Models,Django Templates,在my django模板中,此用户已取消订阅{{sub.is_unsubscribed}始终显示“此用户未订阅错误”,即使根据以下模型它应显示为真。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)

在my django模板
中,此用户已取消订阅{{sub.is_unsubscribed}

始终显示“此用户未订阅错误”,即使根据以下模型它应显示为真。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)

由于我的应用程序的结构原因,我不想将取消订阅移动到
订阅者
模型作为布尔值。如何在保持相同模型格式的情况下解决此问题。

get\u object\u或\u 404
如果根本没有元素,或者存在多个这样的元素,则会引发错误,因为底层实现将使用
.get(…)
。您可以使用
.exists()

class Subscriber(models.Model):
    # …

    def is_unsubscribed(self):
        return MasterUnsubscriber.objects.filter(unsubscriber_email=self.mail).exists()
类订户(models.Model):
# …
def已取消订阅(自行):
return MasterUnsubscriber.objects.filter(unsubscriber\u email=self.mail).exists()
尽管如此,我还是建议用户使用a,而不是通过匹配电子邮件地址。这将是低效的,因为在非索引列上的搜索速度很慢,而且如果用户以后更改了他们的电子邮件,那么突然之间,这些邮件可以再次订阅。Django还提供了在相关对象上进行过滤或聚合的方便方法,因此您可以从Django ORM中获得更多信息