آموزش عبارات F در جنگو

April 2020

عبارت F به شما اجازه میده که دو فیلد از یک آبجکت رو با هم مقایسه کنید.

در این مقاله میخوام از مدل زیر استفاده کنم. این مدل برای ذخیره اطلاعات مربوط به فیلماست:

class Movie(models.Model):
    name = models.CharField(max_length=30)
    budget = models.IntegerField()
    revenue = models.IntegerField()
    year = models.IntegerField()

مدل بالا چهارتا فیلد داره: اسم فیلم, بودجه ساخت, فروش فیلم, سال ساخت.

خب حالا فکر کنید به شما میگن داخل این جدول جوری query بزنید که فقط فیلم هایی که "مقدار بودجه بیشتر از مقدار فروش بوده" رو به ما نشون بده. چیکار میکنید؟

یا فکر کنید به شما بگن جوری query بزنید که فیلم ها بر اساس year ترتیب بندی بشن و فیلم هایی که مقدار year اونها null هستش آخر نشون داده بشه. باز چیکار میکنید؟

اینجا میتونید از F استفاده کنید.

پاسخ query اول:

Movie.objects.filter( budget__gt=F('revenue') )

در مثال بالا گفتم اونهایی رو برام بیار که مقداره فیلد budget بیشتر باشه از مقدار revenue

پاسخ query دوم:

Movie.objects.order_by( F('year').asc(nulls_last=True) )

در کد بالا گفتم نتایج رو بر اساس year ترتیب بندی کن و اونهایی که مقدار year برابر با null هستش رو آخر نشون بده.

ارسال نظر

اگر قراره سوالی بپرسید که داخلش کد هست، بهتره از کدتون عکس بگیرید و به ایمیلی که پایین نوشتم بفرستید