2013-07-03 2 views
1

Я работаю с django на некоторое время, это не ошибка, но я хотел бы узнать, Почему метод create_profile должен сохранять профиль и созданные переменные?Django: profile & create variables

@receiver(post_save, sender=User) 
def create_profile(sender, instance, created, **kwargs): 
    if created: 
     profile, created = UserProfile.objects.get_or_create(user=instance) 

Я попытался

print >> sys.stderr , "create_user" + str(profile) + (str(created)) 

и они возвращают User_Profile юникод значение возврата функции и логическое значение для создания.

Мой вопрос в частности заключается в важности хранения профиля, созданных значений.

UserProfile.objects.get_or_create(user=instance) 

Я попытался назвать заявление в одиночку, и он работает

+0

Что такое линия, в которой вы получили сообщение об ошибке? – Koterpillar

+1

ошибка, вероятно, в заявлении на печать, если вы ее не удалили, так как у вас больше нет переменной с именем profile –

+0

да, я ошибся, что ошибка была в заявлении на печать – laycat

ответ

1

Там нет необходимости, чтобы присвоить результат вызова каких-либо переменных , если вам не нужно их. Таким образом,

UserProfile.objects.get_or_create(user=instance) 

- штраф.

Если вы используете только одну переменную и не другой (судя по ошибке):

profile, _ = UserProfile.objects.get_or_create(user=instance) 
2

Это обычная практика, чтобы сделать это, если вы собираетесь использовать их в дальнейшем:

profile, created = UserProfile.objects.get_or_create(user=instance) 
if profle.check_something_here: 
    return profile.something_else 

или, может быть:

profile, created = UserProfile.objects.get_or_create(user=instance) 
if created: 
    # do something with the newly created profile 
else: 
    # do something else if the profile was already there 

Это, конечно, если вам нужно что-то делать с ними. В противном случае также стоит UserProfile.objects.get_or_create(user=instance).