Уведомления

Группа в Telegram: @pythonsu

#1 Май 29, 2015 17:18:43

Fandal
От:
Зарегистрирован: 2009-05-24
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Django обновление данных формы модели.

Други, помогите!
Есть такая вьюха, она отображает форму модели с соответствующими данными. Хочу ее изменить и сохранить, но вместо обновленной информации, получаю полный клон модели, но с изменениями, которые вносил. Что я не так делаю?
p.s. поле name - primary key

def edit_user_view(request, ext):
    args = {}
    args.update(csrf(request))
    args['username'] = auth.get_user(request)
    args['pbxuser'] = SipExtensions.objects.get(name=ext)
    if request.method == 'POST':
        form = SipExtensionsForm(request.POST or None, instance=args['pbxuser'])
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/pbx/users/show/users/')
    else:
        args['form'] = SipExtensionsForm(instance=args['pbxuser'])
        return render_to_response('edit_user_view.html', args)

Заранее спасибо!



Офлайн

#2 Май 29, 2015 17:51:51

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Django обновление данных формы модели.

Fandal
args = SipExtensions.objects.get(name=ext)
а вам вообще не приходило в голову, что так делать нельзя?
Вы поразмыслите, пожалуйста, почему.



Офлайн

#3 Май 29, 2015 18:01:17

Fandal
От:
Зарегистрирован: 2009-05-24
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Django обновление данных формы модели.

Если бы я знал, как делать нельзя, а как можно - я бы не спрашивал, а сразу сделал правильно и продолжил уныло кодить. Тем более сперва поискал в гугле информацию, попадалось несколько ссылок, где похожие решения есть, например вот:
http://stackoverflow.com/questions/3946036/how-do-i-update-an-instance-of-a-django-model-with-request-post-if-post-is-a-nes

Подскажите, пожалуйста, почему так делать нельзя и как делать можно?



Офлайн

#4 Май 29, 2015 18:14:45

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Django обновление данных формы модели.

Ну хотя бы потому, что get гарантированно работает по id (да и то не всегда), а по name, ну я ХЗ что там у вас за БД, но get всегда нужно обкладывать траями.



Офлайн

#5 Май 29, 2015 18:17:35

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Django обновление данных формы модели.

вообще, мне кажется, что вы не понимаете, что делаете вообще.
Например, вот это нахрена

    args.update(csrf(request))
    args['username'] = auth.get_user(request)



Офлайн

#6 Май 29, 2015 18:20:27

Fandal
От:
Зарегистрирован: 2009-05-24
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Django обновление данных формы модели.

FishHook
Ну хотя бы потому, что get гарантированно работает по id (да и то не всегда), а по name, ну я ХЗ что там у вас за БД, но get всегда нужно обкладывать траями.
Спасибо учту. name у меня первичный ключ вместо id, я же это сказал перед листингом кода, согласен, правильнее будет это вложить в try когда будет работать основной функционал либо… Как сделать это правильно, без model.objects.get(pk)?
И основной вопрос, как внести изменения именно в эту запись, а не клонировать ее с изменениями?



Офлайн

#7 Май 29, 2015 18:24:33

Fandal
От:
Зарегистрирован: 2009-05-24
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Django обновление данных формы модели.

FishHook
вообще, мне кажется, что вы не понимаете, что делаете вообще.Например, вот это нахрена
args.update(csrf(request)) - передает в шаблон токен

args = auth.get_user(request) -Эта строчка передает в шаблон имя пользователя, который “залогинен”, а в шаблоне я это использую по своему усмотрению. Конкретно к вопросу топика это не относится.



Отредактировано Fandal (Май 29, 2015 18:38:29)

Офлайн

#8 Май 29, 2015 18:29:49

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Django обновление данных формы модели.

Расшифруйте вот это

Fandal
вместо обновленной информации, получаю полный клон модели, но с изменениями, которые вносил


Я тупо не понимаю. Если у меня есть структура {father:“Jon”, mother: “Ann”}, и я изменяю father, я получаю что??? Не клон с изменениями а….?



Офлайн

#9 Май 29, 2015 18:30:47

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Django обновление данных формы модели.

Fandal
gs = auth.get_user(request) -Эта строчка передает в шаблон имя пользователя
не надо так делать, читайте доку по джанге, там так не делают



Офлайн

#10 Май 29, 2015 18:40:25

Fandal
От:
Зарегистрирован: 2009-05-24
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Django обновление данных формы модели.

В общем, вопрос исчерпан, я когда тестировал в том числе менял и поле name, которое - есть первичный ключ, в таком случае создавался клон, а если менять другие поля - вьюха работает корректно.

Спасибо!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version