Django 计算模型实例数

Django 计算模型实例数,django,django-models,unique,Django,Django Models,Unique,假设我有一个名为User的模型,其中有一个名为name的字段。如何确定数据库中是否已存在具有特定名称的用户实例 我可以做到: matched_users = User.objects.filter(name = 'Andrew') if matched_users.count() == 0: # It does not exist else: # It does exist 但是,有没有一种方法可以在一行中完成这项工作,而不必检索所有实例,然后对它们进行计数?:让它尝试创建一个

假设我有一个名为
User
的模型,其中有一个名为
name
的字段。如何确定数据库中是否已存在具有特定名称的
用户
实例

我可以做到:

matched_users = User.objects.filter(name = 'Andrew')
if matched_users.count() == 0:
    # It does not exist
else:
    # It does exist
但是,有没有一种方法可以在一行中完成这项工作,而不必检索所有实例,然后对它们进行计数?

:让它尝试创建一个副本并处理异常

您需要在
名称
字段中定义以下内容:

Field.unique

这是在数据库级别和通过模型验证实施的。如果你 尝试在唯一字段中保存具有重复值的模型,即 django.db.IntegrityError将由模型的save()方法引发

:让它尝试创建副本并处理异常

您需要在
名称
字段中定义以下内容:

Field.unique

这是在数据库级别和通过模型验证实施的。如果你 尝试在唯一字段中保存具有重复值的模型,a django.db.IntegrityError将由模型的save()方法引发

是的,您可以使用:

但可能有多个同名用户。您可能需要查找某些唯一字段,例如用户名或电子邮件

如果您想坚持使用
count
方法,则可以将其编写为:

if User.objects.filter(name = 'Andrew').count() > 0:
    # exists
是的,您可以使用:

但可能有多个同名用户。您可能需要查找某些唯一字段,例如用户名或电子邮件

如果您想坚持使用
count
方法,则可以将其编写为:

if User.objects.filter(name = 'Andrew').count() > 0:
    # exists

这已经是你想要的了。因为Django惰性地评估QuerySet,所以它不会检索所有实例。在调用
count()
之前,不会命中数据库。也就是说,
exists()
是更直接的方法。这已经满足了您的需求。因为Django惰性地评估QuerySet,所以它不会检索所有实例。在调用
count()
之前,不会命中数据库。也就是说,
exists()
是更直接的方式。在与数据库交互时,请求原谅并不是那么简单。例如,
IntegrityError
将破坏当前事务,无论您是否捕获它。@KevinChristopherHenry我本可以发布
exists()
解决方案,但我只想从另一个角度提供备选解决方案。并且,取决于用例——例如,如果OP在创建用户之前检查是否存在同名用户,则两种解决方案都有权存在。如果是这种情况,则减少到数据库的往返次数。感谢您的反馈。我的观点只是警告读者不要盲目应用EAFP习惯用法——Python开发人员非常熟悉这种习惯用法——而不仔细考虑与数据库的交互。我同意你的观点,对于某些用例,这将是更有效的解决方案。在与数据库交互时,请求原谅并不是那么简单。例如,
IntegrityError
将破坏当前事务,无论您是否捕获它。@KevinChristopherHenry我本可以发布
exists()
解决方案,但我只想从另一个角度提供备选解决方案。并且,取决于用例——例如,如果OP在创建用户之前检查是否存在同名用户,则两种解决方案都有权存在。如果是这种情况,则减少到数据库的往返次数。感谢您的反馈。我的观点只是警告读者不要盲目应用EAFP习惯用法——Python开发人员非常熟悉这种习惯用法——而不仔细考虑与数据库的交互。我同意您的观点,对于某些用例,这将是更有效的解决方案。