'tuple'对象没有属性 - Django



我正在尝试将一些数据保存到我的数据库中,但我不断收到错误:'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。

还为注释掉的部分提供堆栈跟踪。

@Costantin : 您

正在调用不存在的元组对象的属性,因此这就是您收到错误的原因,例如:

>>> 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'

最新更新