ORM-dən nə vaxt çıxmaq olar
ORM işlərin böyük hissəsini həll edir, annotate, Func, Q və F isə çox şeyi əhatə edir. Öz sahənizə və ya xam SQL-ə o zaman keçin ki, eyni dəyəri dəfələrlə çevirirsiniz, konkret bazanın imkanı lazımdır və ya ölçmə ORM sorğusunun çox yavaş olduğunu göstərib.
| Tələb | Vasitə |
|---|---|
| Öz tipini saxlamaq | Field alt sinfi |
tags__has kimi filtr əlavə etmək | öz Lookup-unuz |
| Queryset daxilində bir SQL ifadəsi | RawSQL, Func |
| Model qaytaran mürəkkəb sorğu | Model.objects.raw() |
| Hesabat, DDL, toplu yazı | connection.cursor() |
💡 Xam SQL SQLite, PostgreSQL və MySQL arasında daşınmır. Onu testlə örtün və bir yerdə saxlayın.
Xüsusi Field
Sahə Python obyekti ilə baza tipi arasında tərcümə edir. Sütun tipi hazır olsun deyə ən yaxın daxili sahədən miras alın və çevirmələri əvəz edin.
from django.db import models
class TagListField(models.TextField):
description = "A list of tags stored as comma-separated text"
def from_db_value(self, value, expression, connection):
if value is None:
return value
return [t for t in value.split(",") if t]
def to_python(self, value):
if value is None or isinstance(value, list):
return value
return [t for t in value.split(",") if t]
def get_prep_value(self, value):
if value is None or isinstance(value, str):
return value
return ",".join(value)
class Post(models.Model):
title = models.CharField(max_length=100)
tags = TagListField(default=list)