【问题标题】:Accessing model inside a function based view.在基于函数的视图中访问模型。
【发布时间】:2018-10-08 05:15:02
【问题描述】:

有没有办法在基于函数的视图中访问模型实例?我在硬编码策略中尝试了下面的代码。我需要它是动态的。

表格:

<form method="POST" 
      action="{% url 'cadmin:toggle_status' model='Library' %}" #***** Model is hardcoded
      class="visible-lg-inline">
{% csrf_token %}
.....
</form>    

网址:

path('toggle-status/<slug:model>', toggle_status, name='toggle_status'),

查看:

def toggle_status(request, model):
    /******* How can i access model instance here? *********/
    if request.POST:    
        toggle_status = request.POST.get('toggle-status')
    pk = request.POST.get('pk')
    if toggle_status and pk:
        if model == "Zone":
            Zone.objects.filter(pk=pk).update(status=toggle_status)
        if model == "Library":
            Library.objects.filter(pk=pk).update(status=toggle_status)
    return HttpResponseRedirect(reverse('cadmin:library_list'))

【问题讨论】:

    标签: django model instance


    【解决方案1】:

    您没有模型实例。如果你想要一个,你需要得到它。

    my_instance = MyModel.objects.get(pk=whatever)
    

    【讨论】:

      【解决方案2】:

      类似

      return HttpResponseRedirect(reverse('cadmin:library_list', kwargs={'model': model}))
      

      action="{% url 'cadmin:toggle_status' model={{model}} %}"
      

      ?

      【讨论】:

        【解决方案3】:

        试试下面的
        我使用eval 来减少代码

        def toggle_status(request, model):
            if request.POST:    
                toggle_status = request.POST.get('toggle-status')
                pk = request.POST.get('pk')
                if toggle_status and pk:
                   if model == "Zone" or model == 'Library':
                       # it's like I  was doing : Zone.Objects.get(pk=pk) or Library.object.get(pk=pk)
                       instance = eval("%s.objects.get(pk=pk)" % model) # Not filter
                       instance.status = toggle_status 
                       instance.save()
                   return HttpResponseRedirect(reverse('cadmin:library_list'))
          # rest of the code
        

        【讨论】:

          猜你喜欢
          • 2021-06-28
          • 2021-09-24
          • 1970-01-01
          • 2013-03-17
          • 2013-01-25
          • 1970-01-01
          • 2018-01-14
          • 2013-07-02
          相关资源
          最近更新 更多