在不使用表单的模型上设置字段

时间:2017-08-17 18:26:53

标签: django django-models django-views

我有一个网站,当用户点击一个bootstrap glyphicon链接时,他们应该被重定向到另一个页面,这个页面是相同的glyphicon,但是是绿色,看起来好像通过按下链接他们激活了按钮。在此过程中,我希望active上的字段ProfileFalse转到True。我有以下代码:

models.py:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    university = models.CharField(max_length=30, blank=True)

    ROLE = (
        ('CUSTOMER', 'User'),  # (value to be set on model, human readable value)
        ('WORKER', 'Worker'),
    )

    role = models.CharField(max_length = 20, choices = ROLE, default = 'USER')


    active = models.BooleanField(default = False)

views.py

def active(request):
    request.user.profile.active = True;
    return render(request, 'core/customer_active.html', {'user': request.user})

home.html的:

<a href="{% url 'active' %}"><span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span></href>

我不确定为什么request.user.profile.active = True;不会更新字段的状态,会是什么?

2 个答案:

答案 0 :(得分:2)

正如其他人所说,你需要保存。但是,您需要保存配置文件,而不是用户,因为这是一个单独的模型。

profile = request.user.profile
profile.active = True
profile.save()

答案 1 :(得分:0)

这是对“活跃”财产的永久性更改吗?如果是这样,您需要保存用户对象。像这样:

def active(request):
    request.user.profile.active = True;
    request.user.save()
    return render(request, 'core/customer_active.html', {'user': request.user})

编辑:可能值得注意的是,这不是更新用户个人资料的最智能方式,每次他们点击此视图时都会保存此属性,但如果您只是想知道为什么True值不是这就是原因。