Различные шаблоны для UpdateView для одной и той же модели в Django - PullRequest
1 голос
/ 24 октября 2019

Итак, у меня есть шаблон с перечнем различных товаров в корзине пользователя - я хотел бы дать пользователю возможность обновить каждый товар из этого представления. Но в зависимости от типа продукта я хотел бы отображать разные update_templates. Какой сценарий должен быть наилучшим для этой ситуации?

Следует ли использовать несколько разных UpdateViews для одной и той же модели? Например:

class ProductType1UpdateView(UpdateView):
    model = CartItem
    fields = '__all__'
    template_name_suffix = '_product1_update_form'

class ProductType2UpdateView(UpdateView):
    model = CartItem
    fields = '__all__'
    template_name_suffix = '_product2_update_form'

Или я должен сделать это в одном представлении и добавить несколько операторов if, которые будут отображать соответствующий шаблон в зависимости от типа продукта? Как:

class ProductUpdateView(UpdateView):
    model = CartItem
    fields = '__all__'
    {here if statement checking product id}
         template_name_suffix = '_product1_update_form'
    {elif}
         template_name_suffix = '_product2_update_form'

Первый вариант работает, но мне он не подходит. Как бы я сформулировал свое заявление if, чтобы сделать это со вторым вариантом? Или есть другой, лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Вы можете переопределить функцию get_template_names(), например:

class ProductUpdateView(UpdateView):
    model = CartItem
    fields = '__all__'

    def get_template_names(self):
         if self.kwargs.get('id') == 1:
             self.template_name_suffix = '_product1_update_form'
          else:
             self.template_name_suffix = '_product2_update_form'
          return super(ProductUpdateView, self).get_template_names()
1 голос
/ 24 октября 2019

Вы должны переопределить функцию get_tamplate_names.

class ProductUpdateView(UpdateView):
    model = CartItem
    fields = '__all__'
    def get_template_names(self):
         if(condition):
              return '_product1_update_form'
         else:
              return '_product2_update_form'

Посмотрите на поток представления класса - https://docs.djangoproject.com/en/2.2/ref/class-based-views/mixins-simple/#django.views.generic.base.TemplateResponseMixin.template_name

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...