Django-创建或删除对象

时间:2018-07-06 08:54:58

标签: django

我想知道在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方法?

4 个答案:

答案 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(...)