属性错误:'bool'对象没有属性

5
我正在为Django项目工作,我编写了一个模型来存储用户详细信息。在注册后,他们完成这个自定义配置文件,我在用户模型中有一个布尔值,说明他们是否已经完成这个自定义配置文件,以便我可以在模板中进行更改。
当第二个配置文件页面的表单提交时,我希望它将Bool从False更新为True,但是我收到了错误消息:
'bool' object has no attribute 'has_created_artist_profile'

请看下方代码:

views.py

def ArtistEditView(request):
    artist = Artist.objects.get(user=request.user)
    current_artist = request.user
    artist_status = current_artist.has_created_artist_profile

    if request.method == 'POST':
        form = ArtistForm(request.POST, request.FILES, instance=artist)
        if form.is_valid():
            artist_status.has_created_artist_profile = True
            artist_status.save()
            form.save()
            return redirect(reverse('artist_home'))
    else:
        artist_dict = model_to_dict(artist)
        form = ArtistForm(artist_dict)
    return render(request, 'artist/artist_edit.html', {'form': form})

forms.py

class ArtistForm(forms.ModelForm):
    class Meta:
        model = Artist
        exclude =['user', ]

有没有人能够提出更好的更新方法或者消除错误的建议?

你能否考虑使用 current_artist.has_created_artist_profile 而不是设置 artist_status?你的问题在于你先将 artist_status 设置为 current_artist.has_created_artist_profile,然后又试图再次这样做。 - Robert Seaman
谢谢@RobertSeaman指出这个问题!这是我犯的愚蠢错误。我已经从artist_status中删除了has_created_artist_profile,所以现在基本上有artist_status = True artist_status.save() form.save(),但仍然收到相同的错误消息。 - Adam Dalton
1
我认为你应该完全删除 artist_status - 它会增加混淆。我想你想要做的是 current_artist.save()。你为什么创建了 artist_status?你是想在不影响 current_artist 对象的情况下做些什么吗? - Robert Seaman
1
兄弟,那个完全奏效了!非常感谢。只是对当前艺术家进行了迭代,一切都很好。 - Adam Dalton
2个回答

3
'bool' object has no attribute 'has_created_artist_profile'的意思是您试图访问布尔对象(TrueFalse)的属性has_created_artist_profile,而不是对象本身的属性。
例如:True.has_created_artist_profile将产生完全相同的错误。
从您的代码来看,您将artist_status设置为一个布尔值,该布尔值是某个对象(current_artist)的一部分,然后试图从该布尔值中访问一个属性。
建议您移除artist_status变量,并直接使用current_artist对象。

1
谢谢Robert,这真的很有帮助!非常感激。 - Adam Dalton

0
Python中出现"AttributeError: 'bool' object has no attribute"的错误是当我们尝试在布尔值(True或False)上访问属性时发生的。为解决该错误,请追踪设置布尔值的位置,或使用hasattr()方法检查属性是否存在。
以下是错误发生的情况。
 artist_status.has_created_artist_profile = True

您正在尝试访问布尔值(True或False)的属性,而不是对象的属性。如果您打印要访问属性的值,它将是一个布尔值。因此,您需要跟踪确切地在代码中设置值为布尔值的位置,并更正赋值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接