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əbVasitə
Öz tipini saxlamaqField alt sinfi
tags__has kimi filtr əlavə etməköz Lookup-unuz
Queryset daxilində bir SQL ifadəsiRawSQL, Func
Model qaytaran mürəkkəb sorğuModel.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.

Dəyərin gediş-gəlişi
Dəyərin gediş-gəlişi
python
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)