Sobes.tech
Middle

Ako určuje Django, či má vykonať operáciu vloženia (insert) alebo aktualizácie (update)?

sobes.tech AI

Odpoveď od AI

Django určuje, či má vykonať operáciu vloženia alebo aktualizácie na základe prítomnosti alebo neprítomnosti primárneho kľúča (zvyčajne id) objektu modelu.

Pri volaní metódy save():

  1. Operácia vloženia (insert): Ak je hodnota primárneho kľúča objektu modelu None (alebo rovná predvolenej hodnote pre AutoField, čo naznačuje, že objekt ešte nebol uložený), Django predpokladá, že ide o nový objekt, ktorý treba vložiť do databázy. Po úspešnom vložení databáza vygeneruje hodnotu primárneho kľúča a priradí ju objektu.
  2. Operácia aktualizácie (update): Ak má objekt modelu už nastavenú hodnotu primárneho kľúča (t.j. nie je None), Django predpokladá, že ide o existujúci objekt v databáze, ktorý je potrebné aktualizovať. Framework vykoná operáciu UPDATE na príslušnom zázname.

Toto správanie je riadené atribútom pk (primárny kľúč) objektu.

Príklad:

# Vytvorenie nového objektu - pk bude `None`
from yourappname.models import YourModel
new_obj = YourModel(some_field='value1')

# Pri prvom volaní save(), pk == None, sa vykoná INSERT
new_obj.save()

# Po uložení obsahuje pk hodnotu generovanú databázou
# Napríklad, new_obj.id môže byť 1

# Úprava existujúceho objektu
existing_obj = YourModel.objects.get(pk=1)
existing_obj.some_field = 'new_value'

# Pri ďalšom volaní save(), pk != None, sa vykoná UPDATE
existing_obj.save()

Dôležité je poznamenať, že hodnota primárneho kľúča odovzdaná do save() (ak existuje) implicitne naznačuje Django zámer aktualizovať existujúci záznam s týmto kľúčom.

Toto je štandardné správanie Django ORM, ktoré zjednodušuje prácu s údajmi, abstrakciou detailov SQL operácií.