更新Django中的多行
所以我有一些模型更新Django中的多行,django,django-models,Django,Django Models,所以我有一些模型 使用者 用户配置文件 UserJob(1-1相关名称为job) 作业(用户作业的外键) 位置(作业和用户都有一个位置) 我需要用三个查询更新用户配置文件 更新在最后一天处于活动状态且与工作地点位于同一位置的用户 更新在最后一天未处于活动状态或与其工作不在同一位置的用户UserJob关系 如果UserJob值days_missed为3,则删除UserJob 我知道我如何做到这一点,只需选择所有具有作业的用户并进行迭代,但对于X数量的用户来说,这似乎过于劳动密集。有没有一个
- 使用者
- 用户配置文件
- UserJob(1-1相关名称为job)
- 作业(用户作业的外键)
- 位置(作业和用户都有一个位置)
- 更新在最后一天处于活动状态且与工作地点位于同一位置的用户
- 更新在最后一天未处于活动状态或与其工作不在同一位置的用户UserJob关系
- 如果UserJob值days_missed为3,则删除UserJob
yesterday = datetime.datetime.now() - datetime.timedelta(days=1)
users = User.objects.filter(
job__isnull = False,
location = job__job__location,
profile__last_online__gte = yesterday
)
问题是您不能使用作业位置位的字段我想这应该可以解决您的问题: 一次更新多个对象: F表达式:参考WHERE子句中的模型值:
您只能更新正在更新的模型上的字段,因此您的查询必须位于
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
)