表单实例未显示在窗口小部件中

时间:2013-08-08 12:02:31

标签: python django django-models django-forms django-templates

views.py

def save_report(request):
    form = ReporterRegisterForm()
    profileform = ProfilecontactForm()
    user = request.user
    userprofile = UserProfile.objects.get(user=user)
    if request.method == 'POST':        
        id = request.POST.get('id')
        user = User.objects.get(pk=id)        
        userprofile = UserProfile.objects.get(user=user.id)
        form = ReporterRegisterForm(request.POST, instance=user) 
        profileform = ProfilecontactForm(request.POST,instance = userprofile)
        if form.is_valid() and profileform.is_valid(): 
            form.save()
            profilesave = profileform.save(commit=False)            
            profilesave.save()
    return render(request, 'setting/edit_reporter.html',
                   {'form': form,
                     'userprofile':userprofile
                    })

urls.py

urlpatterns = patterns(
    'setting.views',
    (r'^$', 'index'),      
    (r'^save-reporter/$', 'save_reporter'),)

JS:

$('.reporter').click(function () {       
        alert(1)     
        var id = $(this).attr('id');  
        var csrf_token = $("#csrf_token").val();
        $.ajax({ 
           data:{
                csrfmiddlewaretoken: ('{{csrf_token}}'),   
               // form:form.serialize(),            
                id:id,

                },
        type:'POST',
        url: '/setting/save-reporter/',
        success: function() {
            $('#authorisedreporter').show();
        }
      });
     });

HTML:

<button type="button" id="{{ list.0.id }}" class="openDiv">{{list.0.name}} </button>
来自list的

{{list.0.id}} id是用户表中的id

这是我的views.py来更新表单数据。我想实例化表单数据,需要在更新模式下显示该字段。它没有得到实例化。我从POST获得了正确的id。需要帮助< / p>

2 个答案:

答案 0 :(得分:0)

假设您要使用request.user填充表单。如果您要为其他用户填充,则需要从网址获取ID,然后检索useruserprofile

因此您的观点可以更新为

def save_report(request):
    user = request.user
    userprofile = UserProfile.objects.get(user=user)
    form = ReporterRegisterForm(instance=user)
    profileform = ProfilecontactForm(instance=userprofile)

    if request.method == 'POST':        
        form = ReporterRegisterForm(request.POST, instance=user) 
        profileform = ProfilecontactForm(request.POST,instance = userprofile)
        if form.is_valid() and profileform.is_valid(): 
            form.save()
            profilesave = profileform.save(commit=False)            
            profilesave.save()
    return render(request, 'setting/edit_reporter.html',
                   {'form': form,
                     'userprofile':userprofile
                    })

答案 1 :(得分:0)

所以我就是这样做的:

将此内容包含在您的html模板中(如果需要,可以使用display:none隐藏它)。 my_id是一个你必须以某种方式传递的上下文变量。

<div id="save-url" rel="{% url "save_reporter" pk=my_id %}" ></div>

然后在你的ajax电话中你可以获取网址:

$.ajax({
   type: 'GET',
   url: $('#save-url').attr('rel'),
...

您的网址将如下所示:

url(r'^save-reporter/(?P<pk>\d+)/$', myapp.views.save_report, name='save_report'), 

你的观点是这样的:

views.py def save_report(request, pk):
     user = User.objects.get(id=pk)

现在pk是您从ajax调用传递的用户ID。 顺便说一下,你发布的网址是指save_reporter,该函数名为save_report。

P.S。没有冒犯,但你应该花更多的时间尽可能清楚地表达你的问题并包括相关的信息。

编辑:Gotcha。这太有趣了。我以为你可以用你拥有的东西访问你的id,但是你可以试试

id = request.POST['id']

在任何情况下,它都不是一种非常“Django”的做事方式,你应该在网址中包含id(参见上面的答案)。