python - 如何更新django中的多个对象

标签 python django orm

当注册日期超过 6 天时,我想同时更新多个对象:

想法是将每个对象的所有问题状态从“进行中”更新为“待定”

有必要迭代吗?

下面是我当前的代码和错误:

models.py
class MaintenanceIssue(models.Model):   
    issue_status = models.CharField(max_length=30, choices=[('pending', 'Pending'), ('on going', 
    'On going'), ('done', 'Done')])    
    register_dt = models.DateTimeField(blank=True, null=True) 

    @property
    def pending_issue(self):
        issue_time_diff = (datetime.now() - self.register_dt).days
        return issue_time_diff

views.py:

on_going_issues = MaintenanceIssue.objects.get(issue_status='On Going')
    if on_going_issues.pending_issue > 6:
        on_going_issues.issue_status = 'Pending'
        on_going_issues.save()

get() returned more than one MaintenanceIssue -- it returned 61!

最佳答案

要一次更新所有对象,您需要创建一个查询来选择您要更新的所有对象,然后对其调用 update

MaintenanceIssue.objects.filter(
    issue_status='On Going',
    register_dt__lt=datetime.datetime.now() - datetime.timedelta(days=6)
).update(issue_status='Pending')

该过滤器与您的属性不完全匹配,下面的过滤器应该可以为您提供更好的匹配,尽管它有点丑陋

from django.db.models import F, Value
from django.db.models.functions import ExtractDay

MaintenanceIssue.objects.filter(
    issue_status='On Going'
).annotate(
    days=ExtractDay(Value(datetime.datetime.now()) - F('register_dt'))
).filter(
    days__gt=6
).update(issue_status='Pending')

关于python - 如何更新django中的多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69898774/

相关文章:

python - 我的代码是错误的(str(1元素)列表转换为int)错误ValueError : invalid literal for int() with base 10: "[' 2']"

python - 在mod_python下执行模块时出现ImportError

python - 如何通过箭头键更改突出显示的 tkinter 按钮?

python - EEG 信号的带宽

python - 信息似乎不正确地从 mysqldb 中出来,python django

python - Django注释,将多个相关值组合到同一个实例上

javascript - 在Django中的JS逻辑之后提交表单

java - 如何从外部 api 类创建 hibernate 实体?

scala - Slick 中不区分大小写的字符串比较?

java - Hibernate 一对多无法初始化集合