Доступ к модели внутри представления на основе функций. - PullRequest
0 голосов
/ 27 апреля 2018

Есть ли способ доступа к экземпляру модели в представлении на основе функций? Я попробовал код ниже в жестко закодированной стратегии. Мне нужно, чтобы оно было динамичным.

Форма:

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

URL:

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'))

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

Что-то вроде

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

и

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

0 голосов
/ 27 апреля 2018

Попробуйте следующее
Я использую 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
0 голосов
/ 27 апреля 2018

У вас нет экземпляра модели. Если вы хотите его, вам нужно его получить.

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