2013-11-10 5 views
1

Кто-нибудь, пожалуйста, объясните мне около created, и где и как его использовать в джанго.django - Что значит создавать?

Я видел его, используя в чем-то вроде этого:

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

И даже в сигналах:

@receiver(post_save, sender=Article) 
def create_approval(sender, **kwargs): 
    if kwargs.get("created", False): 
     approval = Approval.objects.create(article_id=kwargs.get('instance').id) 

мне действительно нужно знать это. Любая помощь будет высоко ценится. Спасибо.

Edit:

Здесь из вышеуказанных кодов:

if kwargs.get("created", False): 

Что created значит здесь? Указывает ли значение created как False. Или что?

ответ

3

Модели Django дают метод удобства, называемый get_or_create, который ищет объект на основе заданных критериев (в kwargs). Если критерии не совпадают, создается новый объект.

Теперь мы не можем определить в представлении, если объект был создан или ранее существовал (особенно если у вас нет created_datetime или аналогичного поля), следовательно created. Это логическая переменная, которая установлена ​​в True, если ORM создал новый объект и установил False, если был найден существующий объект.

Теперь в вашем сценарии:

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

Это говорит, достань мне Person объект с first_name = John, last_name = Lennon, birthday = ...

Если это не найден, создайте новый для меня.

defaults задает начальное значение поля birthday при создании объекта в этом сценарии.

Это также эквивалентно записи

obj = None 
try: 
    obj = Person.objects.get(first_name=’John’, last_name=’Lennon’) 
except Person.DoesNotExist: 
    obj = Person.objects.create(’birthday’ = date(1940, 10, 9), first_name='John', last_name = 'Lennon') 

В приемнике сигнала, kwargs представляет собой словарь с парами ключ-значение. Когда вы смотрите на документации Сигналы, позволяет сказать, что post_save имеет следующую подпись

django.db.models.signals.post_save 

post_save(sender, instance, created, raw, using, update_fields) 

Это S такой же, как

post_save(sender, **kwargs) #where the rest of the args are a dictionary saved in **kwargs 

Здесь created имеет аналогичный смысл. Он уведомляет сигнал о том, был ли вновь создан или обновлен instance.

Итак, если created = True, новый объект был создан. created=False, объект, вероятно, обновился.

+0

Благодарим вас за ответ. Не могли бы вы также объяснить мне, что значит 'if kwargs.get (" created ", False):' означает, как в редакции? – Aamu

+0

Отредактирован ответ .. – karthikr

+0

Итак, означает ли это, что когда статья создается, что-то делать, иначе значение по умолчанию - False? – Aamu

0

created является логической переменной return get_or_create(). Если объект был создан (SQL INSERT) с вызовом get_or_create(), он равен True, если нет (объект был выбран с помощью SELECT), он равен False.

Второе: MyModel.objects.create() заставляет создавать (INSERT).

+0

Благодарим вас за ответ. Но я просто новичок здесь, мог бы, может быть, разработать немного больше. :) – Aamu

+0

@Aamu django - лучший документированный проект, который я знаю. Пожалуйста, взгляните на это. – guettli

+0

Пожалуйста, взгляните на мое Редактирование. – Aamu

Смежные вопросы