我想知道在Django中创建(如果不存在)或删除(如果确实存在)对象的最佳方法是什么。
我知道我可以做这样的事情:
if Like.objects.filter(user=request.user, post=post).exists():
Like.objects.filter(user=request.user, post=post).delete()
else:
Like.objects.create(user=request.user, post=post)
有没有更好的方法,例如Django提供的get_or_create
方法?
答案 0 :(得分:2)
如果是单个对象,请执行以下操作:
try:
Like.objects.get(user=request.user, post=post).delete()
except Like.DoesNotExist
Like.objects.create(...)
答案 1 :(得分:0)
Django允许您使用此
obj, created = Like.objects.get_or_create(
user=request.user,
post=post
)
在这里,您将在obj
中有一个元组,在created
中有一个布尔值,如果您已经有此对象,则您的created
布尔值将被设置为false,因为没有任何东西要创建,否则它将设置为true。
因此,您可以检查创建的值,并根据需要将其删除。
答案 2 :(得分:0)
也许你可以看看这个:
if not Like.objects.get_or_create(user=request.user,post=post)[1]:
Like.objects.filter(user=request.user,post=post).delete()
如果未创建对象,则表示该对象存在;然后将其删除。否则,如果创建了对象,则什么也不做。
灵感来自@Alexis答案
答案 3 :(得分:0)
Like.objects.filter(user=request.user, post=post).delete()
Like.objects.create(...)