【问题标题】:How to update Django model Boolean field as true?如何将 Django 模型布尔字段更新为真?
【发布时间】:2019-09-03 21:19:00
【问题描述】:

我正在尝试更新由布尔值组成的 django 模型字段。这是一位用户将申请项目,默认情况下,一个字段将自动为 false。检查此插入后,系统管理人员将使该字段为真并批准该提案。所以,现在我想将该字段更新为“True”

def project(request, project_id):
    all_primary_info = ProjectPrimaryInfo.objects.get(pk=project_id)
    if all_primary_info.approval == 'False':
        all_primary_info.approval.update(True)
    return render(request, 'administration/all_project_status.html')

这是 ProjectPrimaryInfo 模型:

class ProjectPrimaryInfo(models.Model):
    id = models.AutoField(primary_key=True)
    s_id = models.ForeignKey(Student, null=True, blank=True, on_delete=models.CASCADE)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    approval = models.BooleanField(default=False)
    p_type = models.CharField(max_length=20)  # project or thesis
    p_name = models.CharField(max_length=50)
    p_description = models.CharField(max_length=500)
    vision = models.CharField(max_length=500)
    charter = models.CharField(max_length=250)

    def __str__(self):
        return self.p_name

我希望 all_primary_info.approval 为“真”

【问题讨论】:

    标签: python python-3.x python-2.7 django-models


    【解决方案1】:

    问题在于你对这一行的看法

    if all_primary_info.approval == 'False':
    

    在您的模型中,您将approval 定义为布尔字段,但在上面的行中,您使用了'False',它是一个字符串而不是布尔值,因为您用单个引号括起来。实际上,您是在问 Django if <Boolean Value> == <String Value> 始终评估为 false,因此不会执行 if 条件中的代码。要更正此问题,您需要删除 False 周围的逗号。所以你上面的代码行应该是

    if all_primary_info.approval is False:
    
        # Do your stuff like this
        # all_primary_info.approval(True) is not correct. 
        # You can simply perform a .save on model instance to update the value
    
        all_primary_info.approval = True
        all_primary_info.save()
    

    希望这能解决您的问题。

    【讨论】:

    • def project(request, project_id): all_primary_info = ProjectPrimaryInfo.objects.get(pk=project_id) 如果 all_primary_info.approval 为 False: all_primary_info.approval(True) return render(request, 'administration/all_project_status .html') 但它显示:'bool' 对象在我的浏览器中不可调用并出错。
    • 您在更新字段时犯了一个小错误。我已经编辑了答案,包括更正您的错误。试试看你现在是否能够成功更新它。
    • 我尝试了很多,但它显示'bool'对象在浏览器中没有属性'update'。它不工作。
    • 它工作正常!我的代码中有一行额外的错误!谢谢!
    猜你喜欢
    • 2021-10-26
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 2010-12-19
    • 1970-01-01
    • 2013-11-16
    • 2018-07-05
    相关资源
    最近更新 更多