Django-'bool'对象不可调用

时间:2019-11-27 10:59:33

标签: django

我有一个如下所示的UserProfile模型:

class UserProfile(models.Model):
    user        = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='profile',on_delete=models.CASCADE)
    needhelp    = models.BooleanField(default=True)

def __str__(self):
    return self.user.username

def get_absolute_url(self):
    return ('user:help', (), {'id': self.id})

我正在为网站制作可视化指南,并从一开始就制作了一个模版,询问用户登录时是否需要帮助。

如果他单击“否”,我想将Needhelp bool更改为False并隐藏模式。 如果他单击“是”,我想将Needhelp bool更改为True并启动指南。

这是我走了多远:

class HelpToggle(RedirectView):
    def get_redirect_url(self, pk, *args, **kwargs):
        obj = get_object_or_404(UserProfile, pk=pk)
        url_ = obj.get_absolute_url()
        user = self.request.user
        if user.is_authenticated():
            if user in obj.needhelp.all():
                user.needhelp = False
            else:
                user.needhelp = True
        return url_

url(r'^help/(?P<pk>\d+)/$', HelpToggle.as_view(),name="help") 

但是当我转到url时,我得到'布尔'对象不可调用

谢谢您的帮助

3 个答案:

答案 0 :(得分:2)

您似乎想获取链接到请求用户的profile。然后检查该配置文件的needhelp字段。如果是这样,您可以执行以下操作。

class HelpToggle(RedirectView):
    def get_redirect_url(self, pk, *args, **kwargs):
        user = self.request.user
        obj = get_object_or_404(UserProfile, user=user)
        url_ = obj.get_absolute_url()

        if user.is_authenticated:
            if obj.needhelp:
                obj.needhelp = False
            else:
                obj.needhelp = True
        return url_

尝试更新您的get_absolute_url来呼叫reverse姓名,如下所示

from django.core.urlresolvers import reverse

def get_absolute_url(self):
    return reverse('help', kwargs={'pk': self.pk})

答案 1 :(得分:0)

这很可能是由于调用user.is_authenticated()引起的。根据Django文档(https://docs.djangoproject.com/en/2.2/ref/contrib/auth/),is_authenticated是只读属性,不是要调用的方法。所以您的支票应该是:

if user.is_authenticated:

答案 2 :(得分:0)

使用is_authenticated而不是is_authenticated(),同样,您的决定也不取决于obj.needhelp,它取决于用户的反应,因此请像下面的代码那样进行比较

 class HelpToggle(RedirectView):
    def get_redirect_url(self, pk, *args, **kwargs):
        obj = get_object_or_404(UserProfile, pk=pk)
        url_ = obj.get_absolute_url()
        user = self.request.user
        if user.is_authenticated:

            needhelp = # get the user clicked data, what he want, yes or no that means True or False

            if needhelp == True:
                user.needhelp = True
            else:
                user.needhelp = False
        return url_