Найти - Пользователи
Полная версия: Django обновление данных формы модели.
Начало » Django » Django обновление данных формы модели.
1 2
Fandal
Други, помогите!
Есть такая вьюха, она отображает форму модели с соответствующими данными. Хочу ее изменить и сохранить, но вместо обновленной информации, получаю полный клон модели, но с изменениями, которые вносил. Что я не так делаю?
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)

Заранее спасибо!
FishHook
Fandal
args = SipExtensions.objects.get(name=ext)
а вам вообще не приходило в голову, что так делать нельзя?
Вы поразмыслите, пожалуйста, почему.
Fandal
Если бы я знал, как делать нельзя, а как можно - я бы не спрашивал, а сразу сделал правильно и продолжил уныло кодить. Тем более сперва поискал в гугле информацию, попадалось несколько ссылок, где похожие решения есть, например вот:
http://stackoverflow.com/questions/3946036/how-do-i-update-an-instance-of-a-django-model-with-request-post-if-post-is-a-nes

Подскажите, пожалуйста, почему так делать нельзя и как делать можно?
FishHook
Ну хотя бы потому, что get гарантированно работает по id (да и то не всегда), а по name, ну я ХЗ что там у вас за БД, но get всегда нужно обкладывать траями.
FishHook
вообще, мне кажется, что вы не понимаете, что делаете вообще.
Например, вот это нахрена
    args.update(csrf(request))
    args['username'] = auth.get_user(request)
Fandal
FishHook
Ну хотя бы потому, что get гарантированно работает по id (да и то не всегда), а по name, ну я ХЗ что там у вас за БД, но get всегда нужно обкладывать траями.
Спасибо учту. name у меня первичный ключ вместо id, я же это сказал перед листингом кода, согласен, правильнее будет это вложить в try когда будет работать основной функционал либо… Как сделать это правильно, без model.objects.get(pk)?
И основной вопрос, как внести изменения именно в эту запись, а не клонировать ее с изменениями?
Fandal
FishHook
вообще, мне кажется, что вы не понимаете, что делаете вообще.Например, вот это нахрена
args.update(csrf(request)) - передает в шаблон токен

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


Я тупо не понимаю. Если у меня есть структура {father:“Jon”, mother: “Ann”}, и я изменяю father, я получаю что??? Не клон с изменениями а….?
FishHook
Fandal
gs = auth.get_user(request) -Эта строчка передает в шаблон имя пользователя
не надо так делать, читайте доку по джанге, там так не делают
Fandal
В общем, вопрос исчерпан, я когда тестировал в том числе менял и поле name, которое - есть первичный ключ, в таком случае создавался клон, а если менять другие поля - вьюха работает корректно.

Спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB