Django: строковый объект печатает None - PullRequest
0 голосов
/ 28 февраля 2011

Здравствуйте, у меня есть представление, которое удаляет номера заказов. После удаления строки веб-страница перенаправляется на страницу клиентов, давая пользователю знать, что номер заказа был удален. Существует проблема. Я получаю это.

Previous order None deleted

Там написано None, но я хочу указать номер заказа, который я удалил. Кажется, он говорит «нет», потому что я уже удалил этот номер заказа, поэтому, когда он просматривает список номеров заказов, он не может найти этот номер.

РЕДАКТИРОВАТЬ: вот решение. Номер заказа должен быть удален после отправки сообщения.

   def delete_confirmation(request, order_no = 0, service_type = 0):
        order = None
        count = 0
        title = models.SERVICE_CHOICES[int(service_type) - 1][1]
        #title = type[1]
        order_number = request.session['order_number']
        try:
            order = models.Order.objects.get(pk = order_no)
            count = order.orderservicelist_set.count()
            if request.POST.get('delete'):
                request.user.message_set.create(message = "Previous order " + str(order_number.pk) + "  deleted")
                order_number.delete()
                return HttpResponseRedirect(reverse(return_clients))

        except:
            return HttpResponseRedirect(reverse(return_clients))
        return render_to_response('delete_order.html', {'order':order, 'title':title, 'count':count, 'order_no':order_no }, context_instance = RequestContext(request))

Ответы [ 2 ]

0 голосов
/ 28 февраля 2011

Очень неосторожная ошибка.почему я написал order_number.delete() дважды?

if request.POST.get('delete'):
    order_number.delete() # Why was this there? of course, if I have this it will delete till it gets to the next part where it informs the user which order number was deleted! 
    request.user.message_set.create(message = "Previous order " + str(order_number.pk) + "  deleted")
    order_number.delete()

исправлено

0 голосов
/ 28 февраля 2011

Одна из вещей, которую delete() делает на экземпляре модели, устанавливает его pk равным None, так что если вы попытаетесь сохранить его, он создаст новый экземпляр, а не попытается обновить старый (нет давно существующий) один.

Итак, простое решение: возьмите PK перед удалением. На самом деле, вы можете просто избавиться от первого звонка на delete, который у вас есть, потому что вы вызываете его снова после создания сообщения.

Кстати, лучший способ создания сообщения - использовать форматирование строки:

message = "Previous order %s deleted" % order_number.pk
...