2010-01-14 2 views
0

Я пытаюсь заполнить значение записи внешнего ключа в одной из моих моделей, используя значение, хранящееся как данные сеанса ... все это работает хорошо, но когда я пытаюсь получить доступ к запись от администратора я получаю эту ошибку:Заполнение ввода внешнего ключа для ModelForm

Caught an exception while rendering: coercing to Unicode: 
    need string or buffer, Applicant found 

Где Applicant является моделью связанно с помощью ключевого поля внешнего. Как мне решить эту проблему? Код выглядит следующим образом:

if "customer_details" in request.session: 
    customer = request.session["customer_details"] 
else: 
    return HttpResponseRedirect('/application/') 

if request.method == 'POST': 
    current_address_form = CurAddressForm(request.POST or None) 

    if current_address_form.is_valid(): 
     current = current_address_form.save(commit=False) 
     current.customer = customer 
     current.save() 

else: 
    current_address_form = CurAddressForm() 

return render_to_response('customeraddress.html', { 
    'current_address_form': current_address_form,}, 
    context_instance=RequestContext(request)) 
+3

Какая линия этого кода вызывает ошибку? Что находится в 'request.session [" customer_details "]'? Первичный ключ? Возможно, вам придется выбрать «Заявитель», представленный данными сеанса, прежде чем пытаться установить для него «current.customer». –

+0

Ошибка срабатывает, когда я пытаюсь просмотреть запись в администраторе – Stephen

ответ

3

Похоже, вы пытаетесь вывести представление Юникода модели, используя ключевое поле иностранного, который указывает на заявителя.

Нечто подобное (в непосредственной близости от верхней части моей головы):

class Applicant(models.Model): 
    name = models.CharField(max_length=255) 

class Foo(models.Model): 
    applicant = models.ForeignKey(Applicant) 

    def __unicode__(self): 
     # this won't work because __unicode__ must return an Unicode string! 
     return self.applicant 

Пожалуйста, покажите нам код модели, чтобы убедиться. Если мое предположение верно, убедитесь, что метод __unicode__() возвращает объект unicode. Что-то вроде этого:

def __unicode__(self): 
    return self.applicant.name 

или

def __unicode__(self): 
    return unicode(self.applicant) 
+0

WOW !!! ... это решило проблему. Спасибо Haes :) – Stephen

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