Django delete_or_create - PullRequest
       6

Django delete_or_create

0 голосов
/ 20 января 2020

Есть ли метод delete_or_create в django ORM, похожий на get_or_create ?

что-то похожее на:

p, deleted = Person.objects.create_or_delete(
    first_name='John',
    last_name='Lennon',
    defaults={'birthday': date(1940, 10, 9)},
)

# create_or_delete() has created the object
>>> deleted
False

p, deleted = Person.objects.create_or_delete(
    first_name='John',
    last_name='Lennon',
    defaults={'birthday': date(1940, 10, 9)},
)

# create_or_delete() has deleted the object as it does exist in the DB
>>> deleted
True

Ответы [ 2 ]

3 голосов
/ 20 января 2020

get_or_create только делает это:

try:
    obj = Person.objects.get(first_name='John', last_name='Lennon')
    created = False
except Person.DoesNotExist:
    obj = Person(first_name='John', last_name='Lennon', birthday=date(1940, 10, 9))
    obj.save()
    created = True
return obj, created

Вы можете реализовать свою собственную функцию следующим образом:

try:
    obj = Person.objects.get(first_name='John', last_name='Lennon')
    # if obj exists delete
    obj.delete()
    deleted = True
except Person.DoesNotExist:
    obj = Person(first_name='John', last_name='Lennon', birthday=date(1940, 10, 9))
    obj.save()
    deleted = False
return obj, deleted
1 голос
/ 20 января 2020

Может обновить или создать функция поможет вам. Таким образом, вы можете переопределить старую запись новой информацией или создать объект.

Другой способ, аналогичный предыдущему ответу, состоит в использовании функции exist () , которая проверяет если запрос не является пустым:

if Person.objects.filter(first_name='John', last_name='Lennon').exists():
   obj = Person.objects.filter(first_name='John', last_name='Lennon')
   obj.delete()
else:
   obj = Person(first_name='John', last_name='Lennon')
   obj.save()

Таким образом, избегается строка «try».

...