Sobes.tech
Middle

როგორ განსაზღვრავს Django, საჭიროა თუ არა ჩასმა (insert) ან განახლება (update)?

sobes.tech AI

პასუხი AI-სგან

დჯანგო განსაზღვრავს, უნდა შესრულდეს შეყვანის ან განახლების ოპერაცია, დამოკიდებულია მოდელის ობიექტზე არსებული ან არარსებული ძირითადი გასაღების (საშუალოდ id) არსებობაზე.

save() მეთოდის გამოძახებისას:

  1. შეყვანის ოპერაცია (insert): თუ მოდელის ობიექტის ძირითადი გასაღების მნიშვნელობა არის None (ან შესაბამისი დეფოლტ მნიშვნელობა AutoField-ისთვის, რაც მიუთითებს, რომ ობიექტი ჯერ არ არის შენახული), Django მიიჩნევს, რომ ეს ახალი ობიექტია, რომელიც უნდა დაემატოს ბაზას. წარმატებული დამატების შემდეგ, ბაზა ქმნის ძირითადი გასაღების მნიშვნელობას და მას ობიექტს უკანონებს.
  2. განახლების ოპერაცია (update): თუ მოდელის ობიექტს უკვე აქვს განსაზღვრული ძირითადი გასაღების მნიშვნელობა (ანუ, None არაა), Django მიიჩნევს, რომ ეს უკვე არსებული ობიექტია ბაზაში, რომელიც უნდა განახლდეს. Framework ახორციელებს UPDATE ოპერაციას შესაბამის ჩანაწერზე.

ეს ქცევა კონტროლდება ობიექტის pk (ძირითადი გასაღების) ატრიბუტით.

მაგალითი:

# ახალი ობიექტის შექმნა - pk იქნება `None`
from yourappname.models import YourModel
new_obj = YourModel(some_field='value1')

# პირველად `save()`-ის გამოძახებისას, pk == None, ხორციელდება INSERT
new_obj.save()

# შენახვის შემდეგ, pk შეიცავს ბაზის მიერ გენერირებულ მნიშვნელობას
# მაგალითად, new_obj.id შეიძლება იყოს 1

# არსებული ობიექტის შეცვლა
existing_obj = YourModel.objects.get(pk=1)
existing_obj.some_field = 'new_value'

# შემდეგი `save()`-ის გამოძახებაზე, pk != None, ხორციელდება UPDATE
existing_obj.save()

მნიშვნელოვანია აღინიშნოს, რომ save()-ს გადაცემული ძირითადი გასაღების მნიშვნელობა (თუ არსებობს) ირიბად მიუთითებს Django-ს იმაზე, რომ განახლდეს ამ გასაღებით არსებული ჩანაწერი.

ეს არის Django ORM-ის სტანდარტული ქცევა, რომელიც ამარტივებს მონაცემებთან მუშაობას, დამალული SQL ოპერაციების დეტალებს.