دوره‌ها / Django / درج داده (Django Insert Data)

درج داده (Django Insert Data)

25 دقیقه Article

درج داده: اضافه کردن اطلاعات به دیتابیس 📝

حالا که مدل‌ها رو ساختیم، وقتشه که داده‌ها رو به دیتابیس اضافه کنیم. در جنگو، این کار خیلی ساده‌تر از نوشتن 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
سوال تمرین

🎯 تمرین عملی: مدیریت داده‌ها

در این تمرین، یک سیستم ساده برای مدیریت پست‌ها می‌سازیم:

  1. یک تابع بنویسید که یک دسته‌بندی جدید بسازه
  2. یک تابع بنویسید که چندین پست رو به صورت bulk ایجاد کنه
  3. همه پست‌ها رو به دسته‌بندی که ساختید لینک کنید

راهنمایی: از 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)}")

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.