2010-10-23 3 views
1

Я пытаюсь сохранить новый объект из модели django, используя запрос запроса данных POST. Это часть обработчика PISTON. Я видел это в многочисленных примерах, но я просто не могу заставить его работать.Как сохранить модель Django из запроса.POST?

Вот мой код:

class FestHandler(BaseHandler): 
    model = Deal 

    def create(self, request): 
     """ 
     Creates a new fest. 
     """ 
     attrs = self.flatten_dict(request.POST) 
     postcopy = request.POST.copy() 
     if self.exists(**attrs): 
      return rc.DUPLICATE_ENTRY 
     else: 
      loc = Location.objects.get(pk=attrs['location']) 
      postcopy['location'] = loc 
      fest = Fest(postcopy) 
      fest.save() 
      return fest 

Здесь ошибка я получаю каждый раз:
Exception was: int() argument must be a string or a number, not 'QueryDict'

Я понимаю, что означает, что ошибка, поэтому в основном я спрашиваю, как я могу сохранить новый «Fest», передавая весь словарь POST без необходимости вводить ключи вручную каждый раз, например:

loc = Location.objects.get(pk=attrs['location']) 
fest = Fest(
    location=loc, 
    name=attrs['name'], 
    description=attrs['description'], 
    details=attrs['details'], 
) 

Спасибо за помощь!

ответ

2

Во-первых, я думаю, что вы будете счастливее от вас, явно сделайте свои ПК целыми.

 loc = Location.objects.get(pk=int(attrs['location'])) 

Во-вторых, вы должны использовать форму.

  1. Он проверяет ваши поля.

  2. Он создаст объект Model из объекта Form.

Прочтите это. http://docs.djangoproject.com/en/1.2/topics/forms/modelforms/

+0

Хм. Казалось, это сработало. Однако теперь он возвращает форму HTML после сохранения, вместо объекта Fest, который PISTON передает JSON. Есть ли простой способ изменить это? Или, есть ли способ сделать это без использования «Формы»? Благодаря! –

+0

Ничего, я понял. Извините за мои глупые вопросы, я до сих пор не совсем доволен Django OR python. Спасибо за вашу помощь! –