تجربه ای از کار با Models API

جنگو

سلام

در دستور زیر از شل پایتون استفاده شده است که با آن کاری نداریم اما برای اینکه این شل را با پروژۀ خودمان بالا بیاوریم لازم است دستور زیر را در cmd اجرا می کنیم.

خروجی:

این حالت مشابه وقتی است که صرفاً دستور python را اجرا می کنیم اما این دستور، پروژۀ ما را به sys.path  اضافه و سپس جنگو را لود می کند. یعنی می توانیم به راحتی مدل‌ها و سایر فایل‌های مربوط به پروژه را درون آن import کنیم.

در ابتدا کلاس بورد را اضافه می کنیم.

یک شی جدید از آن ایجاد می کنیم.

برای اینکه این شی را درون دیتابیس ذخیره کنیم؛ دستور زیر را وارد می کنیم:

از دستور save هم برای ذخیره و هم برای بروزرسانی استفاده می شود.

با توجه به اینکه در این دستور مقدار id را تنظیم نکرده‌ایم؛ جنگو به صورت پیش فرض آن را 1 تنظیم و به صورت خودکار اضافه می کند.

دسترسی به سایر فیلدها هم به آسانی امکان پذیر است.

برای بروز رسانی هم به راحتی با دستور زیر اینکار را می کنیم.

هر کدام از مدل‌ها در جنگو با attribute خاصی همراه است که به آن Model Manager می گوییم. دسترسی به آن با تابع objects فراهم می شود و می توان به صورت مستقیم شی‌ای را ایجاد و مقدار دهی کرد:

با دستوراتی که تا اینجا وارد کردیم دو بورد مختلف ساخته ایم. برای دسترسی به لیست آن دستور زیر:

که البته نتیجه به صورت یک QuerySet نمایش داده می شود و خیلی مفهوم نیست و علتش هم این است که تابع __str__ را در مدل خود تعریف نکرده ایم.

با دستور ()exit از شل پایتون خارج شده و در اپِ بورد فایل models.py را ویرایش و این تابع را به کلاس بورد اضافه می کنیم.

دوباره همان کوئری قبلی را در CMD اجرا می کنیم.

و کدهای زیر را در محیط شل پایتون می زنیم.

همانطور که معلوم است بهتر شد. برای بررسی تمام داده‌ها از مفهوم لیست استفاده می کنیم:

و خروجی به شکل زیر می شود:

یکی از تابع‌های پرکاربرد دیگر get است:

استفاده از تابع get باید با دقت باشد و مثلاً اگر آیدی را 3 وارد کنیم خطا می دهد.

البته این تابع را می توان در خصوص سایر فیلدها هم به کار برد.

* نکتۀ بسیار مهم این که این تابع به بزرگ و کوچک حروف حساس است:

  1. خلاصۀ این توابع:
Operation Code sample
ساخت یک شی بدون ذخیره سازی

board = Board()

ذخیره یا بروز رسانی شی

board.save()

ساخت و ذخیره شی در دیتابیس

Board.objects.create(name=’…’, description=’…’)

لیست اشیاء مختلف

Board.objects.all()

دریافت یک شیء و بر اساس فیلد

Board.objects.get(id=1)

ترجمۀ اختصاصی توسط تمدن

 

مطلب بعدی: Views, Templates و Static Files

مطلب قبلی: مهاجرت مدل ها | Migration the Models

بدون دیدگاه

پاسخی بگذارید

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

جنگو
ویوی تکمیل بازیابی پسورد

سلام ساخت فایل قالب: templates/password_reset_complete.html {% extends ‘base_accounts.html’ %} {% block title %}Password changed!{% endblock %} {% block content %} <div class=”row justify-content-center”> <div class=”col-lg-6 col-md-8 col-sm-10″> <div class=”card”> <div class=”card-body”> <h3 class=”card-title”>Password changed!</h3> <div class=”alert alert-success” role=”alert”> You have successfully changed your password! You may now proceed to log …

جنگو
ویوی تأیید بازیابی پسورد

سلام نوشتن فایل قالب به شکل زیر: templates/password_reset_confirm.html {% extends ‘base_accounts.html’ %} {% block title %} {% if validlink %} Change password for {{ form.user.username }} {% else %} Reset your password {% endif %} {% endblock %} {% block content %} <div class=”row justify-content-center”> <div class=”col-lg-6 col-md-8 col-sm-10″> <div …

جنگو
ویوی شروع بازیابی پسورد

سلام نوشتن فایل قالب به ترتیب زیر: templates/password_reset_done.html {% extends ‘base_accounts.html’ %} {% block title %}Reset your password{% endblock %} {% block content %} <div class=”row justify-content-center”> <div class=”col-lg-4 col-md-6 col-sm-8″> <div class=”card”> <div class=”card-body”> <h3 class=”card-title”>Reset your password</h3> <p>Check your email for a link to reset your password. If …

هرگونه استفادۀ از این آموزش به صورت رایگان و با ارجاع به تمدن جایز است.