Существование объекта Джанго - PullRequest
3 голосов
/ 06 января 2012

Я хотел проверить, что объект существует в БД, и, если он не существует, добавить его в базу данных.Я пытался:

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 ]

4 голосов
/ 06 января 2012

Как правило, вы бы использовали 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(....)
1 голос
/ 06 января 2012

Проблема с вашим кодом в том, что MyModel.objects.get повысит DoesNotExist, попробуйте использовать exists вместо:

if not MyModel.objects.filter(surname='foo').exists():
    management.call_command('loaddata', 'Bootstrap_data', verbosity=0)
1 голос
/ 06 января 2012
if not MyModel.objects.filter(surname='foo').exists()

RTFriendlyM

...