sql >> Database >  >> RDS >> PostgreSQL

Voorwaardelijke update_or_create met django

De volgende voorbeelden werken mogelijk goed

1e optie

try:
    obj = Room.objects.get(
        id=id, # test with other fields if you want
    )
    if obj.modified_at < DATETIME:
        obj.capacity = 10
        obj.save()
    else:
        obj = Room.objects.create(
            # fields attributes
        )
except Room.DoesNotExist:
    obj = Room.objects.create(
        # fields attributes
    )

2e optie

of je kunt dit doen met Voorwaardelijke expressie van django

from django.db.models import F, Case, When
import datetime

your_date = datetime.datetime.now()
condition = Case(When(modified_at__lt=your_date,then=10),default=F('capacity'))
  • We controleren of modified_at is kleiner dan your_date
  • dan is de waarde van deze voorwaarde 10,
  • anders behouden we dezelfde waarde van het veld met F('capacity')

rest van de code

Room.objects.update_or_create(name='new_name',
           defaults={'name':'new_name','capacity':conditition})



  1. Hoe char(N) datatype af te dwingen in plaats van varchar(N) in django modelveld

  2. MYSQL combineert weergave van twee tabellen met een verschillend aantal invoerrecords

  3. Kan de serialisatie van het object niet deserialiseren nadat het geserialiseerd is opgeslagen in de database

  4. JSON-gegevens uit het CLOB-veld parseren met PL/SQL