更新Django中的许多行

时间:2014-05-26 17:43:59

标签: django django-models

所以我有几个型号......

  • 用户
  • 用户配置
  • UserJob(1-1相关名称是工作)
  • 作业(用户作业的外键)
  • 位置(工作和用户都有位置)

我需要使用三个查询更新用户个人资料..

  • 更新在最后一天处于活动状态且与作业位置位于同一位置的用户
  • 更新用户UserJob关系,他们在最后一天没有活动或与他们的工作不在同一地点
  • 如果UserJob值days_missed为3
  • ,请删除UserJob

我知道如何才能做到这一点只是选择所有有工作的用户并进行迭代,但这似乎是劳动密集型的X用户量。是否有一种简单的方法,比如使用UPDATE ... WHERE查询或其他东西。

我在考虑这样的事情吗?:

yesterday = datetime.datetime.now() - datetime.timedelta(days=1)
users = User.objects.filter(
    job__isnull = False,
    location = job__job__location,
    profile__last_online__gte = yesterday
)

问题是你不能在job__job__location位

使用字段

2 个答案:

答案 0 :(得分:1)

您只能更新要更新的模型上的字段,因此您的查询必须位于UserJob对象上。在没有您的模型定义的情况下,我没有确切的关系,但这或其他关闭应该有效:

UserJob.objects.filter(
    user__location = F('job__location'),
    user__profile__last_online__gte = yesterday
).update(
    days_worked = F('days_worked') + 1,
    points = F('points') + 1
)

答案 1 :(得分:0)

我想这应该可以解决你的问题:

一次更新多个对象:

https://docs.djangoproject.com/en/dev/topics/db/queries/#updating-multiple-objects-at-once

F表达式:请参阅WHERE子句中的模型值:

https://docs.djangoproject.com/en/dev/topics/db/queries/#using-f-expressions-in-filters