Middle
Django necə müəyyən edir ki, insert və ya update əməliyyatını həyata keçirmək lazımdır?
sobes.tech Süni İntellekt
AI-dan cavab
Django, model obyektinin əsas açarının (adətən id) mövcudluğu və ya mövcud olmamasına əsasən, əlavə etmə və ya yeniləmə əməliyyatını həyata keçirməli olub-olmadığını müəyyən edir.
save() metodunu çağırarkən:
- Əlavə əməliyyatı (insert): Əgər model obyektinin əsas açar dəyəri
None-dirsə (və yaAutoFieldüçün standart dəyərə bərabərdirsə, bu, obyektin hələ saxlanmadığını göstərir), Django bunun yeni bir obyekt olduğunu və verilənlər bazasına əlavə olunmalı olduğunu qəbul edir. Uğurlu əlavə etdikdən sonra, verilənlər bazası əsas açar dəyərini yaradır və obyektə təyin edir. - Yeniləmə əməliyyatı (update): Əgər model obyektinin artıq təyin olunmuş əsas açar dəyəri varsa (yəni,
Nonedeyil), Django bunun mövcud bir obyekt olduğunu və yenilənməsi lazım olduğunu qəbul edir. Framework, müvafiq qeyd üçünUPDATEəməliyyatını həyata keçirir.
Bu davranış, obyektin pk (əsas açar) atributu tərəfindən idarə olunur.
Nümunə:
# Yeni obyekt yaradılır - pk `None` olacaq
from yourappname.models import YourModel
new_obj = YourModel(some_field='value1')
# `save()`-in ilk çağırışında, pk == None, INSERT həyata keçirilir
new_obj.save()
# Yadda saxlandıqdan sonra, pk verilənlər bazası tərəfindən yaradılan dəyəri ehtiva edir
# Məsələn, new_obj.id 1 ola bilər
# Mövcud obyektin dəyişdirilməsi
existing_obj = YourModel.objects.get(pk=1)
existing_obj.some_field = 'new_value'
# Növbəti `save()` çağırışında, pk != None, UPDATE həyata keçirilir
existing_obj.save()
Əhəmiyyətlidir ki, save()-ə ötürülən əsas açar dəyəri (əgər varsa) Django-ya bu qeyd ilə mövcud qeydi bu açar ilə yeniləmək niyyətində olduğunu göstərir.
Bu, Django ORM-nin standart davranışıdır və məlumatlarla işləməni sadələşdirir, SQL əməliyyatlarının detalları ilə məşğul olmadan.