get_or_create () вопрос - PullRequest
       18

get_or_create () вопрос

2 голосов
/ 12 июля 2010

Из официальной документации не могу понять, что такое параметр по умолчанию.

obj, created = Person.objects.get_or_create(first_name='John', last_name='Lennon',
                  defaults={'birthday': date(1940, 10, 9)}

Означает ли это, что он будет искать поля, которые соответствуют параметрам John и Lennon, а день рождения просто будет вставлен? Могу ли я использовать что-то другое вместо значений по умолчанию?

А какой метод следует использовать для очистки всех полей в таблице (модели)?

Это дает мне ошибку FileField не может разрешить ключевое слово по умолчанию в поле

Так что мне нужно искать поля, если я их нашел - обновить данные. Если я не нашел его, я должен создать новое поле ... Но, как я понял, он не обновит мои поля по умолчанию, когда найдет существующие поля.

Ответы [ 3 ]

4 голосов
/ 15 июля 2010

Это вполне очевидно - если get_or_create находит запрашиваемый объект, defaults keword ничего не делает.Но если он создает объект, то экземпляр, хранящийся в obj, имеет поле birthday (в вашем примере), заполненное соответствующим значением.Вы можете передать любой словарь как defaults, если его ключи являются действительными именами полей для запрашиваемой модели.

Чтобы очистить всю таблицу, вы должны использовать что-то вроде:

Model.objects.all().delete()

, что эквивалентно:

DELETE FROM app_model WHERE True;

Чтобы установить какое-либо поле в каждом объекте (некоторый столбец в каждой строке), есть метод update():

Model.objects.all().update( some_field = "" )

, который переводитto:

UPDATE app_model SET `some_field` = '' WHERE True;

Мой sql немного ржавый, но я считаю, что так или иначе, так или иначе.

1 голос
/ 12 июля 2010

Вы можете обратиться к этой документации django для более подробного объяснения метода get_or_create. Короче говоря, сначала он пытается получить данные, указав first_name и last_name, если нет, то создает и сохраняет новый объект, и в этом случае используется словарь по умолчанию. И возвращаемым значением является соответствующий объект и True / False независимо от того, был создан новый объект или нет.

0 голосов
/ 12 июля 2010

Вы можете использовать все, что угодно.по умолчанию, если вы ничего не установили.

...