【问题标题】:'QuerySet' object has no attribute 'save' using django'QuerySet' 对象没有使用 django 的属性'save'
【发布时间】:2020-08-06 06:37:56
【问题描述】:
opportunity = Opportunity.objects.filter(created_by__client=client, id=pk).exclude(is_deleted=True)

for opp in opportunity:
    id = opp.id
    name = opp.name
    contact = opp.contact.id

project = Project.objects.filter(client=client)    
project.opportunity = id
project.name = name
project.contact = contact

project.save()

【问题讨论】:

  • 使用Project.objects.get(client=client)
  • 您是否尝试更新单个项目 obj?还是一组项目?

标签: python django django-models django-views


【解决方案1】:

Project.objects.filter(client=client) 这将返回一组对象。如果您只想检索 1 个对象,请使用 Project.objects.filter(client=client).first()Project.objects.get(client=client)(推荐)

然后使用.save()方法就可以正常工作了

【讨论】:

    【解决方案2】:

    如果您只想更新 django 查询集中的一个实体。您需要使用.first()(https://docs.djangoproject.com/en/3.1/ref/models/querysets/#first) 或.get()(https://docs.djangoproject.com/en/3.1/ref/models/querysets/#get) 方法获取它:

    id = opp.id
    name = opp.name
    contact = opp.contact.id
    project = Project.objects.filter(client=client).first() # get first value from qs
    
    project.opportunity = id
    project.name = name
    project.contact = contact
    
    project.save()
    

    您还可以使用.update()(https://docs.djangoproject.com/en/3.1/ref/models/querysets/#update) 方法更新所有查询集元素:

    id = opp.id
    name = opp.name
    contact = opp.contact.id
    project = Project.objects.filter(client=client).update(
         opportunity=id,
         name=name,
         contact=contact,
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 2011-12-14
      • 2021-08-05
      • 2017-06-22
      • 2013-05-10
      • 1970-01-01
      • 2015-11-16
      相关资源
      最近更新 更多