姜戈 delete_or_create
Django delete_or_create
django ORM中有没有类似get_or_create的方法delete_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
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
也许 update-or-create 功能会对您有所帮助。这样,您可以用新信息覆盖旧条目或创建对象。
另一种方法,类似于前面的答案,是使用 exists() 函数,它检查查询是否为空:
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"行。
django ORM中有没有类似get_or_create的方法delete_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
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
也许 update-or-create 功能会对您有所帮助。这样,您可以用新信息覆盖旧条目或创建对象。
另一种方法,类似于前面的答案,是使用 exists() 函数,它检查查询是否为空:
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"行。