Skip to content

برگه‌ها

  • درباره من

تماس با من

برای ارتباط با بنده ایمیل های خود را به آدرس :
miladhzz@gmail.com
ارسال کنید
و یا به شماره 09384677005 پیامک ارسال کنید.

سایت میلاد حاتمی
  • پروژه ها
  • آموزش
  • برنامه نویسی
  • نرم افزار
  • درباره من
خانه » چرا در جنگو بهتر است از save به تنهایی استفاده نکنیم؟

چرا در جنگو بهتر است از save به تنهایی استفاده نکنیم؟

Post Views: 256
Leave a comment on چرا در جنگو بهتر است از save به تنهایی استفاده نکنیم؟ اکتبر 18, 2024 اکتبر 18, 2024 علاقه شخصی
نویسنده

تو جنگو هیچوقت از .save() خالی استفاده نکنید موقعه آپدیت کردن. چون هرچی تو مموری باشه فلاش میکنه به دیتابیس. پس بهتره explicit باشین و بگین چی میخواین فرستاده شه سمت دیتابیس. یک مثال عینی میزنم که متوجه شین یعنی چی این جمله.

ببین فکر کن یک مدل داری با ۳ تا فیلد

MyModel
– id
– first_name
– last_name

که دو تای پایینی nullable هستن. رکورد ایدی اول تو دیتابیس هم first name اش null هست هم last name اش. من ۲ درخواست همزمان میدم. درخواست اول first name رو مانی میکنم. درخواست دوم last name رو مظفر.
اتفاقی که میفته اینه که اول از دیتابیس MyModel رو میخونه جفت درخواستا. برای جفتشون first_name=None و last_name=None هست. بعد هرکدومشون همچین query ای میزنن:

درخواست اول:

// model.first_name = “Mani”
// model.save()
UPDATE MyModel
SET first_name = ‘Mani’, last_name = NULL
WHERE MyModel.id = 1

درخواست دوم:

// model.last_name = “Mozaffar”
// model.save()
UPDATE MyModel
SET first_name = NULL, last_name = ‘Mozaffar’
WHERE MyModel.id = 1

دیدی چی شد؟ جفتشون یک NULL هم فرستادن سمت دیتابیس. چرا؟ چون تو مموری یکی از نام و نام خانوادگی null بود و وقتی .save رو میزنی همونو میفرسته به دیتابیس.
بنابراین یا first name نال میمونه یا last name. در صورتی که درستش اینه:

// req 2
UPDATE MyModel
SET last_name = ‘Mozaffar’
WHERE MyModel.id = 1

// req 1
UPDATE MyModel
SET first_name = ‘Mani’
WHERE MyModel.id = 1

معادل orm اش چی میشه؟

# req 1
MyModel.object.filter(id=instance.id).update(last_name=”Mani”)

# req 2
MyModel.object.filter(id=instance.id).update(last_name=”Mozaffar”)

# OR…
mymodel.save(update_fields=[‘first_name’])

@PyBackendHub

Post Views: 256

Add a Comment لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Time limit is exhausted. Please reload CAPTCHA.

© 2025 - All rights reserved