Django对象存在性

3 投票
3 回答
1029 浏览
提问于 2025-04-17 09:41

我想检查一下某个对象在数据库里是否存在,如果不存在的话,就把它添加到数据库里。

我试过这样做:

if not MyModel.objects().get(surname='foo'): 
     management.call_command('loaddata', 'Bootstrap_data', verbosity=0)#adds this object from fixtures

但是我在数据库(sqlite3)里遇到了查询错误。请问怎么才能解决这种对象验证的问题呢?

错误信息是:

DoesNotExist at /
MyModel matching query does not exist.

这是因为数据库里没有这个姓氏的对象。

3 个回答

1

你代码的问题在于,MyModel.objects.get 这个方法会抛出一个 DoesNotExist 的错误,也就是说找不到你要的东西。你可以试试用 exists 这个方法来代替:

if not MyModel.objects.filter(surname='foo').exists():
    management.call_command('loaddata', 'Bootstrap_data', verbosity=0)
1
if not MyModel.objects.filter(surname='foo').exists()

RTFriendlyM

4

通常你会使用 get_or_create 这个方法。

model_instance = MyModel.objects.get_or_create(surname='foo')

其实你不应该用 management.call_command 来做这种事情。

不过,如果我理解错了,或者你有特别的理由要这样做,可以试试这个:

try:
    MyModel.objects.get(surname='foo')
except MyModel.DoesNotExist:
      management.call_command(....)

或者

if not MyModel.objects.filter(surname='foo').exists():
      management.call_command(....)

撰写回答