راه جنگویی ش اینه:
Product.objects.filter(category_id=5).update(is_active=False)
اما مشکلش اینه که update مستقیم کد SQL اجرا میکنه.
یعنی چی؟
یعنی اگه مثلا فیلد تاریخ داشته باشی که auto_now باشه، آپدیت نمیشه.
یا اگه سیگنال pre_save یا post_save هم داشته باشی اجرا نمیشن.
اینجا داکیومنت جنگو بهش اشاره کرده:
https://docs.djangoproject.com/en/5.2/topics/db/queries/#updating-multiple-objects-at-once
روشهای مختلفی هست، برای اینکه این مشکل رو نداشته باشیم. مثلا حلقه بزنیم و save رو اجرا کنیم، که اصلا خوب نیست.
یکی دیگه این روشه:
Product.objects.filter(category_id=5).update(
is_active=False,
updated_at=timezone.now(),
)
شاید مسخره باشه، ولی صراحتا خودمون فیلد updated_at رو مقداردهی کردیم.
بالا گفتم، این کارو نکنیم، جنگو نمیفهمه که اون رکورد تغییر کرده.
اینو اگه میدونستی 👍 بزن، وگرنه 👎 بزن
@DjangoLearn_ir