对象无法写入是什么意思?

Bri*_*n D 12 django django-models django-views

我不知道这里发生了什么......我只是想检查模型字段的值,然后相应地更新它......任何帮助或见解都值得赞赏!

模型:

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
    beta = models.CharField(max_length=1, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

视图:

from internal.accounts.models import UserProfile
from django.contrib.auth.models import User
@login_required    
def beta_testers(request):
    user = User.objects.get(username=request.user.username)
    user_profile = user.get_profile()

    count = UserProfile.objects.filter(beta='1').count()

    if count < 50 and not user_profile['beta']:
        user_profile['beta'] = '1'
        user_profile.save()
Run Code Online (Sandbox Code Playgroud)

错误:

TypeError at /utilities/beta-signup/
'UserProfile' object is unsubscriptable
Request Method: GET
Request URL:    http://localhost/utilities/beta-signup/?x=1&y=15
Django Version: 1.2.1
Exception Type: TypeError
Exception Value:    
'UserProfile' object is unsubscriptable
Exception Location: C:/django\internal\cms_helper\views.py in beta_testers, line 284
Run Code Online (Sandbox Code Playgroud)

Ned*_*der 20

错误是"unSUBscriptable".您的user_profile对象不是字典.使用user_profile.beta,而不是user_profile['beta'].


boz*_*doz 7

或者,您可以使用带getattr的字符串:

getattr(user_profile, 'beta', False)
Run Code Online (Sandbox Code Playgroud)

False是默认值; 在您的情况下,它将检查是否设置了值.我发现这非常有用,所以我想我会发布这个解决方案,即使这个问题是在几年前提出的.:)