Джанго UpdateView универсальный класс - PullRequest
0 голосов
/ 24 мая 2018

Как я могу получить доступ к объекту, переданному пользователем внутри общего класса представления?

В шаблоне, когда пользователь нажимает ссылку:

<td><a href="{% url 'update_peon' pk=item.pk %}"><button class="btn btn-warning">Edit</button></a></td>

, это идет к urls.py:

url(r'^update_peon/(?P<pk>\d+)$', views.UpdatePeon.as_view(), name='update_peon'),

и мой взгляд:

   class UpdatePeon(generic.UpdateView):

        login_required = True
        template_name = 'appform/Peons/peon_form.html'
        model = Person
        form_class = PersonForm
        success_url = reverse_lazy('view_peons')

Я хотел бы получить доступ к item.attr1 или по крайней мере item.pk внутри класса, чтобы я мог изменить модель и форму соответственно, что-то вроде:

   class UpdatePeon(generic.UpdateView):

        login_required = True
        template_name = 'appform/Peons/peon_form.html'

        if item['attr1'] == "Attribute1":
            model = model1
            form = model1Form
        else:
             etc

        success_url = reverse_lazy('view_peons')

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

1 Ответ

0 голосов
/ 24 мая 2018
class UpdatePeon(generic.UpdateView):
    if item['attr1'] == "Attribute1":
        model = model1
        form = model1Form
    else:
        ...

Вы не можете поместить код в тело класса следующим образом.Он запускается при загрузке модуля, прежде чем вы получите доступ к request.

. Вы должны переопределить определенный метод.Например, вы можете переопределить get_form_class, чтобы изменить класс формы, используемый представлением.Внутри представления вы можете получить доступ к объекту, который обновляется с помощью self.object.

class UpdatePeon(generic.UpdateView):
    def get_form_class(self):
        if self.object.pk == 1:
            return MyForm
        else:
            return OtherForm

. Вы можете найти веб-сайт ccbv полезным для изучения методов обновления вида .

...