如何用django模板隐藏按钮/表单?

时间:2017-10-23 08:09:16

标签: python django django-templates

如果用户已按下按钮,我想隐藏表单。我尝试使用一些JS代码,它运行良好,但刷新页面后,表单上的按钮保持有效。这对我来说并不是一个巨大的惊喜))我想使用Django模板隐藏表单,但它并不像我想象的那么容易。

我的HTML:

    <div class="who_come">

   <p>Who come : </p>
   {% for u in who_come %}
   {%if u.visiter.username != request.user.username %}
   <form class="form-inline" role="form" method="post" id="joinToEventForm">
      {% csrf_token %}
      <p align="left"><b ><button type="submit">I want join</button></b></p></b></p>
   </form>
   {% endif %}
   {% endfor %}
   <div id="who_come_links">
   {% for u in who_come reversed %}
    <p><a href="profile/{{u.visiter.username}}" title="{{u.visiter.first_name}} {{u.visiter.last_name}}">{{u.visiter.username}}</a></p>
   {% endfor %}
   </div>
   <script>
      $('#joinToEventForm').submit(function() {
         $(this).find("button[type='submit']").prop('disabled',true);
      });
   </script>

<script>

   $('#joinToEventForm').on('submit', function(event){
    event.preventDefault();
    console.log("form submitted!")  // sanity check


   $.ajax({
       type:'POST',
       data:{
           action: 'joinEvent',
           csrfmiddlewaretoken:'{{ csrf_token }}'
       },

       success : function (data) {
           //console.log(data);

           var usernames = JSON.parse(data);
           var html_str = '';

           for (var i=0; i < usernames.length; i++) {
               html_str += '<p><a href="profile/' + usernames[i] + '">' + usernames[i] + '</a></p>';
           }

           $('#who_come_links').html(html_str);

           }


   });
});
</script>

</div>

我的模特:

class WhoComeOnEvent(models.Model):
    visiter = models.ForeignKey(User, related_name='WhoComeOnEvent')
    which_event = models.ForeignKey(Topic, related_name='WhoComeOnEvent')

在这个地方:

<p>Who come : </p>
       {% for u in who_come %}
       {%if u.visiter.username != request.user.username %}
       <form class="form-inline" role="form" method="post" id="joinToEventForm">
          {% csrf_token %}
          <p align="left"><b ><button type="submit">I want join</button></b></p></b></p>
       </form>
       {% endif %}
       {% endfor %}

我试图检查谁已加入事件,如果用户在数据库表中请求相同的用户,则隐藏表单。但是这段代码不起作用。无论用户是否存在于db表中,它都会隐藏表单。第二部分是与当前事件无关。假设在我的情况下隐藏表单的django模板将起作用。它只会检查表中的行,但会忽略当前的事件或不同的事件(不确定,但我很害怕)。

我的观点:

def p(request, pk):
    user = request.user
    topic = get_object_or_404(Topic, pk=pk)
    post = get_object_or_404(Post, pk=pk)
    comment = Comments.objects.filter(pk=pk)
    who_come = WhoComeOnEvent.objects.filter(which_event=topic.id)

    if request.is_ajax() and request.POST.get('action') == 'joinEvent':
        who_come_obj = WhoComeOnEvent.objects.create(
            visiter=user,
            which_event=post.topic
        )

        visitors_usernames = []
        for w in who_come:
            visitors_usernames.append(w.visiter.username)

        return HttpResponse(json.dumps(visitors_usernames))

    if request.method == 'POST':
        form = CustomCommentForm(request.POST)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.post = post
            comment.creator = user
            comment = Comments.objects.create(
                body=form.cleaned_data.get('body'),
                creator=user,
                post=post
            )

            return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
            # return render(request, 'post.html', {'post': post, 'topic': topic, 'comment': comment,
            #                                      'form': form, 'who_come': who_come})
    else:
        form = CustomCommentForm()
    return render(request, 'post.html', {'post': post, 'topic': topic, 'comment': comment,
                                         'form': form, 'who_come': who_come})

解决方案:

我找到了更优雅的解决方案,只需将.distinct('visitor')添加到我的who_come查询集中。 如果有人会阅读它并发现我的解决方案有帮助,请注意,仍然会向数据库创建对象并且它不是唯一的!

0 个答案:

没有答案