2014-09-25 5 views
0

Im пытается сохранить значение в текстовое поле в django с задачей celery, но если текстовое поле имеет значение, я хочу добавить новое значение к старому значению.Добавить новое значение в старое значение

Вот моя модель:

class Profile(models.Model): 
    username = models.CharField(max_length=200) 
    info = models.TextField(blank=True) 

Вот что я пробовал:

@shared_task 
def update_profile(data, profile_username): 

    #Get the profile 
    profile = Profile.objects.get(username=profile_username) #(WORKING) 

    #Check if info is in dataset 
    if 'info' in data: #(WORKING) 

     #Check if there is an old value 
     if profile.info: #(WORKING) 

      #Old value found 

      old_info = profile.info 

      #Append old and new value 
      new_info = '{}\n{}'format(old_info, data['info']) 

      profile.info = new_info 


     else: 
      #No old value fond, save the new value 
      profile.info = data['info'] #(WORKING) 

    #Save profile 
    profile.save() #(WORKING) 

Если поле не имеет прежнего значения, я могу сохранить новое значение просто отлично, но когда я пытаюсь сохранить старое и новое значение вместе, я не буду работать! Я могу сохранить только один из них, а не «обновлять» поле, как я хочу.

Edit:

теперь я вижу, что new_info = '{}\n{}'format(old_info, data['info']) работает, но я получаю эту ошибку: UnicodeEncodeError('ascii', u'Test\xf8', 128, 129, 'ordinal not in range(128)')

+0

ли эта строка 'профиль = Profile.objects.get (профиль = профиль)' действительно получить профиль? 'Profile' не имеет атрибута' profile'. – 2014-09-25 09:03:43

+0

Да, да. Обновлен код вопроса, так что это более понятно. –

+0

Вы пробовали очевидный вариант: 'profile.info = '{} \ n {}'. Format (profile.info, data ['info'])'? –

ответ

1

Вам нужно упростить цикл, так что вы можете отлаживать его правильно. Используйте get (метод словарей), чтобы извлечь ключ, и вы можете присвоить ему значение по умолчанию, если ключ не существует.

Сведя вместе, ваш код сейчас:

def update_profile(data, profile_username): 

    profile = Profile.objects.get(username=profile_username) #(WORKING) 
    profile.info = u'{}\n{}'.format(profile.info, data.get('info', '').encode('utf-8')) 
    profile.save() 
Смежные вопросы