@Ruchey
Конструктор мебели. Пишу макросы для К3-Мебель

Как получить get_absolute_url одной модели, но от разных имён url?

Как получить get_absolute_url одной модели, но от разных имён url?
Есть модель StandardModel, в которой содержатся шкафы.
Эти шкафы делятся по категориям. Категории прописаны в поле с выбором
type_case = models.CharField(max_length=10, choices=TYPE_CASE, default='case', verbose_name='Тип корпуса')

Адреса (URL`ы) делятся как раз по этим категориям, но все данные берутся из этой одной модели.
path('base/<b>case</b>/<int:pk>/', views.BasicItemView.as_view(), {'filter': 'case'}, name='<b>basiccaseitem</b>'),
    path('base/<b>built-in</b>/<int:pk>/', views.BasicItemView.as_view(), {'filter': 'built-in'}, name='<b>basicbuiltinitem</b>'),

Что бы получить URL из модели, пишем:
def get_absolute_url(self):
    return reverse('basiccaseitem', args=[str(self.pk)])

Но тут проблема, что мы можем указать только одно имя basiccaseitem. Как быть, если надо вернуть урл и для basicbuiltinitem?

spoiler

Модель
class StandardModel(models.Model):
    'Базовые шкафы'
    
    title = models.CharField(max_length=200, verbose_name='Название')
    article = models.CharField(max_length=10, unique=True, verbose_name='Артикул')
    qdoors = models.SmallIntegerField(choices=QUANTITY_DOORS, default=2, verbose_name='Количество дверей')
    type_case = models.CharField(max_length=10, choices=TYPE_CASE, default='case', verbose_name='Тип корпуса')
    .....

    def get_absolute_url(self):
        return reverse('basiccaseitem', args=[str(self.pk)])


URL.py
urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
    path('base/case/', views.BasicView.as_view(), {'filter': 'case'}, name='basiccase'),
    path('base/case/<int:pk>/', views.BasicItemView.as_view(), {'filter': 'case'}, name='basiccaseitem'),
    path('base/built-in/', views.BasicView.as_view(), {'filter': 'built-in'}, name='basicbuiltin'),
    path('base/built-in/<int:pk>/', views.BasicItemView.as_view(), {'filter': 'built-in'}, name='basicbuiltinitem'),
    path('base/doors/', views.DoorsView.as_view(), name='doors'),
    path('base/doors/<int:pk>/', views.DoorsItemView.as_view(), name='doorsitem'),
    path('works/', views.WorksView.as_view(), name='works'),
    path('works/<int:pk>/', views.WorksItemView.as_view(), name='worksid'),
]


  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
rSedoy
@rSedoy
Python/Django
case и built-in сделать таким же параметром в path как и pk
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы