Django: 添加前检查对象是否已存在

30 投票
5 回答
30662 浏览
提问于 2025-04-15 16:32

我该怎么检查一个对象是否已经存在,如果不存在再添加它呢?

这是代码 - 我不想在数据库中重复添加 follow_role,如果它已经存在的话。我该怎么先检查一下呢?是不是可以用 get() 呢?但是如果 get() 没有找到东西,Django 会不会报错呢?

current_user = request.user
follow_role = UserToUserRole(from_user=current_user, to_user=user, role='follow')
follow_role.save()

5 个回答

3

如果你在寻找一个布尔值

UserToUserRole.objects.filter(
    from_user=current_user, to_user=user, role='follow'
).exists()
4

如果你在使用较新的Django版本,可以在UserToUserRole模型中使用一个叫做 unique_together 的选项。然后,你可以使用Joe Holloway展示的get_or_create()方法。这样做可以确保你不会得到重复的记录。

44

在你的模型管理器中,有一个叫做 'get_or_create' 的辅助函数,可以用来处理这种情况:

role, created = UserToUserRole.objects.get_or_create(
    from_user=current_user, to_user=user, role='follow')

这个函数会返回一个包含两个部分的元组,第一个是 'model',也就是你想要的对象,第二个是 'bool',它会告诉你这个对象是否是新创建的。

撰写回答