我有一个如下所示的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时,我得到'布尔'对象不可调用
谢谢您的帮助
答案 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_