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():
- Operácia vloženia (insert): Ak je hodnota primárneho kľúča objektu modelu
None(alebo rovná predvolenej hodnote preAutoField, č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. - 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áciuUPDATEna 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í.