درج داده (Django Insert Data)
درج داده: اضافه کردن اطلاعات به دیتابیس 📝
حالا که مدلها رو ساختیم، وقتشه که دادهها رو به دیتابیس اضافه کنیم. در جنگو، این کار خیلی سادهتر از نوشتن SQL دستیه!
ORM در عمل: وقتی شما با مدلهای جنگو کار میکنید، در واقع دارید با اشیاء پایتون کار میکنید. جنگو خودش SQL رو مینویسه و اجرا میکنه!
روش اول: استفاده از create()
سادهترین روش برای ساخت یک رکورد جدید:
# روش 1: استفاده از create()
post = Post.objects.create(
title="اولین پست من",
content="این محتوای پست است",
author=user,
published=True
)
# روش 2: ساخت و سپس save()
post = Post(
title="پست دوم",
content="محتوا",
author=user
)
post.save()
تفاوت create() و save():
create(): هم ساخت و هم ذخیره رو یکجا انجام میده (سریعتر)save(): اول باید شیء رو بسازید، بعد save کنید (برای کارهای پیچیدهتر مفیده)
ساخت چندین رکورد (Bulk Create)
اگر میخواید چندین رکورد رو یکجا اضافه کنید:
# ساخت چندین رکورد به صورت یکجا
posts = Post.objects.bulk_create([
Post(title="پست 1", content="محتوا 1", author=user),
Post(title="پست 2", content="محتوا 2", author=user),
Post(title="پست 3", content="محتوا 3", author=user),
])
نکته عملکرد:
bulk_create() خیلی سریعتر از حلقه زدن و create کردن یکی یکی است. برای اضافه کردن تعداد زیادی داده، حتماً از این روش استفاده کنید!
کار با ForeignKey
وقتی میخواید یک فیلد ForeignKey رو پر کنید:
# روش 1: استفاده از شیء
category = Category.objects.get(name="پایتون")
post = Post.objects.create(
title="پست جدید",
category=category
)
# روش 2: استفاده از id
post = Post.objects.create(
title="پست جدید",
category_id=1 # id دستهبندی
)
خطای رایج: فراموش کردن
save() بعد از ساخت شیء با روش دوم (بدون create) یکی از رایجترین خطاهاست. همیشه چک کنید که دادهها ذخیره شدن!
🎯 تمرین عملی:
یک دستهبندی جدید بسازید و سپس 3 پست به اون دستهبندی اضافه کنید. از bulk_create برای ساخت پستها استفاده کنید.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
تمرین: ساخت و ذخیره دادهها
Easy
سوال تمرین
🎯 تمرین عملی: مدیریت دادهها
در این تمرین، یک سیستم ساده برای مدیریت پستها میسازیم:
- یک تابع بنویسید که یک دستهبندی جدید بسازه
- یک تابع بنویسید که چندین پست رو به صورت bulk ایجاد کنه
- همه پستها رو به دستهبندی که ساختید لینک کنید
راهنمایی: از Category.objects.create() و Post.objects.bulk_create() استفاده کنید.
پاسخ تمرین
PYTHON
from django.db import models
from datetime import datetime
# فرض کنید این مدلها از قبل تعریف شدن
class Category(models.Model):
name = models.CharField(max_length=100)
slug = models.SlugField(unique=True)
def __str__(self):
return self.name
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
category = models.ForeignKey(Category, on_delete=models.CASCADE, null=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
def create_category_and_posts():
# ساخت دستهبندی
category, created = Category.objects.get_or_create(
name="آموزش",
defaults={'slug': 'tutorial'}
)
# ساخت چندین پست به صورت bulk
posts = Post.objects.bulk_create([
Post(title="پست اول", content="محتوا 1", category=category),
Post(title="پست دوم", content="محتوا 2", category=category),
Post(title="پست سوم", content="محتوا 3", category=category),
])
return category, posts
if __name__ == "__main__":
cat, posts = create_category_and_posts()
print(f"دستهبندی ساخته شد: {cat}")
print(f"تعداد پستها: {len(posts)}")
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.