我正在尝试将一些数据保存到我的数据库中,但我不断收到错误:'tuple' object has no attribute 'view_id
我认为我不知何故从我的数据库中错误地获取了对象。
Models.py
class GoogleProperty(models.Model): # Settings for each single site, a user can have many!
user = models.CharField(max_length=200) # Owner of site
google_email = models.EmailField(max_length=200)
profile_id = models.CharField(max_length=200) # Needed to delete users, but should be removed!
property_name = models.CharField(max_length=200, blank=True, null=True)
property_id = models.CharField(max_length=200, blank=True, null=True)
property_url = models.CharField(max_length=200, blank=True, null=True)
view_id = models.CharField(max_length=200)
def __str__(self):
return str(self.property_url)
Views.py
def some_function(requests):
if len(list_of_views)==1: # Save to DB and call it a day
view_name = list_of_views[0]['name']
view_id = list_of_views[0]['id']
print(view_id) # 123823290
dic_views[view_name]=view_id
# Save View to DB
'''
obj, created = GoogleProperty.objects.get_or_create(google_email=current_user, defaults={'view_id': view_id})
if not created:
obj.view_id = view_id
obj.save()
'''
objx = GoogleProperty.objects.get_or_create(google_email=current_user)
print(objx) # (<GoogleProperty: None>, False)
objx.view_id = view_id
objx.save
return HttpResponse(request, '/ga_app/report.html', {'view_id':view_id})
else: # Many Views, ask which one they want to track
Do something
编辑添加的回溯:
File "/my-path/views.py", line 212, in select_view
objx.view_id = view_id
AttributeError: 'tuple' object has no attribute 'view_id'
我已经将print()
函数的结果作为旁注。此外,在我的代码的某些部分,我添加了defaults={'view_id': view_id}
真的需要吗?如果是这样,为什么?
附言我尝试了两个注释掉的代码和一个没有注释掉的代码。
你把正确的方法注释掉了,为什么?
https://docs.djangoproject.com/en/1.11/ref/models/querysets/#get-or-create get_or_create
返回表单(对象,创建 [布尔值](的元组。
您要做的是拆分该命令的结果:
objx, created = GoogleProperty.objects.get_or_create(google_email=current_user)
然后你可以做:
if not created:
objx.view_id = view_id
objx.save()
你似乎有语法错误。 objx
是一个元组,元组由整数索引,而且元组在 python 中也是不可变的,所以这应该有效。
objx[0].view_id = view_id
objx[0].save()
并提供了defaults
以在创建对象时设置默认属性。因此,如果创建了对象,则基本上您正在设置默认view_id。
还为注释掉的部分提供堆栈跟踪。
正在调用不存在的元组对象的属性,因此这就是您收到错误的原因,例如:
>>> t = ('23','e')
>>> t[1]
'e'
>>> t.r
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'r'