TorhamDev | تورهام 😳
ما کلیک نمیکنیم، ما کد میزنیم! • YouTube youtube.com/@techwithtori • Twitter twitter.com/TorhamDev • CodeNaline Podcast @CodeNaline • Group @programmer_dudes • Github github.com/TorhamDev • Email [email protected]
إظهار المزيد2 115
المشتركون
لا توجد بيانات24 ساعات
+67 أيام
+11430 أيام
- المشتركون
- التغطية البريدية
- ER - نسبة المشاركة
جاري تحميل البيانات...
معدل نمو المشترك
جاري تحميل البيانات...
چطور کوئری آپدیت بهتری داخل #جنگو بزنیم؟
روشهای زیادی برای آپدیت کردن یک آجکت یا چندتا آبجکت داخل جنگو وجود داره، ساده ترین حالتی که افراد استفاده میکنن همچین چیزی.
مدل فرضی:
class Records(models.Model):
name = models.Charfield()
balance = models.InetegerField()
country =models.CharField()
برای مثال اگه کسی بخواد یک آبجکت از این مدل رو آپدیت کنه همچین کار میکنه:
r = Records.objects.get(pk=1)
r.name = "new name"
r.save()
که این اوکیه، بد نیست و آپدیت براتون انجام میده اما یک نکته رو بهش توجه نمیکنید!
زمانی که شما یک آبجکت این شکلی آپدیت میکنید در اصل دارید تمام فیلدها رو آپدیت میکنید :) ولی خب مقدار فیلدهای قبلی همون قبلی ها آپدیت میشه، برای اینکه از این کار جلو گیری کنید باید explicit ( نمیدونم، فکر کنم دقیق تر معنی بده) باشید یعنی، دقیقا بگید کدوم فیلد/فیلدها میخوایید آپدیت کنید. این کار میکنید با استفاده از پارامتر update_fields انجام بدید.
r = Records.objects.get(pk=1)
r.name = "new name"
r.save(update_fields=["name"])
البته باید مراقب باشید که حتما فیلدهایی که میخوایید آپدیت کنید رو داخلش بزارید مگرنه آپدیت نمیشن.
پست بعدی آپدیت کردن چند آبجکت...
@TorhamDevCH👍 13❤ 7
تولدم مبارک 🎉
هدیه نمیگیرم ولی اگه کسی خواست بده میتونه تتر بزنه 😂❤️
My Public Address to Receive TRX TDzW3Q8DkenuYdoQFqsRE7mZZYuFhzZRAH
Pay me via Trust Wallet: https://link.trustwallet.com/send?coin=195&address=TDzW3Q8DkenuYdoQFqsRE7mZZYuFhzZRAH
Download and Install the Trust Wallet App
Explore the world of Web3 in your pocket with Trust Wallet. Download the app now.
❤ 19👎 3👍 2🍾 2😁 1🗿 1
بچهها میتونید تسکهایی که شرکتها بهتون دادن برای مصاحبه رو برام بفرستید لطفا؟ 👈👉🥹
این پست درباره آپتومایز کردن read بود، پست فردا درباره اپتومایز کردن update میگم. اونم خیلی جالبه
👍 4🆒 1
بیایید به بهانه آپتومایز کردن کوئریهای #جنگو چندتا چیز جدید درباره ORM جنگو یاد بگیریم
شما همیشه وقتی چیزی رو نیاز دارید داخل جنگو همچین کوئری میزنید:
Record.objects.filter(id__in=[1,2,3,4])
خب این قرار آبجکتهایی که ایدی ۱ تا ۴ دارن بهمون بده. حالا شما میخوایید با اینا یکسری پردازش انجام بدید مثلا بیایید اسم همه رکوردها رو نشون کار برید یا به عبارتی:
for r in records:
print(record.name)
و کار شما اینجا تموم میشه و خوشحال میشید. اماااااااا شما یک عالمه پردازش بی جا انجام دادید و یک عالمه منابع الکی خرج کرید. بیایید ببینیم کوئری بالا وقتی sql میشه چه شکلی میشه:
SELECT id,
name,
created_at,
is_deleted
FROM records
WHERE id IN (1, 2, 3, 4);
این چیزی که داخل دیتابیس اجرا میشه. متوجه اش شدید؟
اگه نشدید باید بگم شما فقط به فیلد name نیاز داشتید اما تمام فیلدهای اون اون رکوردها رو گرفتید! هیچ وقت هم ازشون استفاده نکردید.
برای حل این مشکل جنگو دوتا راه حل داره:
1. values
2. values_list
با استفاده از این دو میتونید فقط فیلدهایی که میخوایید رو بگیرید. برای مثال:
Record.objects.filter(id__in=[1,2,3,4]).values('name')
و حالا کوئری که میسازید همچین چیزی خواهد شد:
SELECT name
FROM records
WHERE id IN (1, 2, 3, 4);
و همینطور که میبینید حالا فقط اون فیلدی رو گرفتید که لازمش دارید.
تفاوت بین values و valuse_list تنها در دیتا استراکچر خروجی که به شما میده و داخل کوئری نهایی هردو مثل هم عمل میکنن. برای درک بیشتر:
>>> Record.objects.filter(is_deleted=False).values('id', 'name')
<QuerySet [{'id': 1, 'name': 'First record'}, {'id': 2, 'name': 'Second Record'}, {'id': 3, 'name': 'Third Record'}]>
>>> Record.objects.filter(is_deleted=False).values_list('id', 'name')
<QuerySet [(1, 'First record'), (2, 'Second Record'), (3, 'Third Record')]>
بله یکی دیکشنری و دومی تاپل :) همچنین اگه فقط فقط یک فیلد میخوایید مثلا name میتونید از flat=True هم استفاده کنید برای بهتر شدن دیتا خروجی:
```python
````🙏 7👍 4👌 2✍ 1
این چند روز اخیر داشتم رو این پروژه کار میکردم. خیلی چیزا جدید یادگرفتم. هنوز هم روش کار میکنم، هر روز که چیزا جدید میخونم روش پیاده میکنم، تا الان باب میل خودم هست :) حالا فرستادمش برای اهل فنها تا مشکل بگیرن ازش بدم بیاد XD
https://github.com/TorhamDev/simple-wallet-improved
داخلش از جنگو - جنگو رست - رببیت - پستگرس استفاده کردم.
@TorhamDevCH
GitHub - TorhamDev/simple-wallet-improved: improved version of simple wallet
improved version of simple wallet. Contribute to TorhamDev/simple-wallet-improved development by creating an account on GitHub.
امروز یک پست جالب درباره آپتومایز کردن کوئریهای جنگو مینویسم ✨✌️
🔥 11❤🔥 2👍 1👌 1
اختر خطة مختلفة
تسمح خطتك الحالية بتحليلات لما لا يزيد عن 5 قنوات. للحصول على المزيد، يُرجى اختيار خطة مختلفة.