u
28 апреля 2020 г. 12:22

При добавлении материала после клика на категорию появляется подкатегория

Всем привет. Уже какой день не могу понять куда двигаться...
Необходимо сделать что-то подобное авитовскому добавлению объявлений (выбираем категорию -> появляется подкатегория, выбираем подкатегорию -> появляется подподкатегория)

Имеем models.py

  1. class Category(models.Model):
  2. name = models.CharField(max_length=250)
  3. slug = models.SlugField(max_length=250, null=True, blank=True, unique=True)
  4.  
  5. class Meta:
  6. verbose_name_plural = "Categories"
  7.  
  8. def __str__(self):
  9. return self.name
  10.  
  11.  
  12. class Subcategory1(models.Model):
  13. name = models.CharField(max_length=250)
  14. slug = models.SlugField(max_length=250, null=True, blank=True, unique=True)
  15. category = models.ForeignKey(Category, on_delete=models.PROTECT)
  16.  
  17. class Meta:
  18. verbose_name_plural = "Subcategories1"
  19.  
  20. def __str__(self):
  21. return self.name
  22.  
  23.  
  24. class Subcategory2(models.Model):
  25. name = models.CharField(max_length=250)
  26. slug = models.SlugField(max_length=250, null=True, blank=True, unique=True)
  27. subcategory = models.ForeignKey(Subcategory1, on_delete=models.PROTECT)
  28.  
  29. class Meta:
  30. verbose_name_plural = "Subcategories2"
  31.  
  32. def __str__(self):
  33. return self.name
  34.  
  35.  
  36. class Advert(models.Model):
  37. category = models.ForeignKey(Category, on_delete=models.PROTECT, null=True, blank=True)
  38. subcategory1 = models.ForeignKey(Subcategory1, on_delete=models.PROTECT, null=True, blank=True)
  39. subcategory2 = models.ForeignKey(Subcategory2, on_delete=models.PROTECT, null=True, blank=True)
  40.  
  41. title = models.CharField(max_length=150)
  42. slug = models.SlugField('URL', max_length=250, null=True, blank=True, unique=True)
  43. content = models.TextField()
  44. .............................

и views.py

  1. class CreateListing(LoginRequiredMixin, CreateView):
  2. model = Advert
  3. fields = ['title', 'content', 'category', 'subcategory1', 'subcategory2']
  4. template_name = 'add.html'
  5.  
  6. def get_success_url(self):
  7. return reverse('home')
  8.  
  9. def form_valid(self, form):
  10. form.instance.created_by = self.request.user
  11. return super().form_valid(form)

Куда копать вообще не представляю. Понимаю, что надо это все как то фильтровать... но как?

2

Вам это нравится? Поделитесь в социальных сетях!

5
Evgenii Legotckoi
  • 28 апреля 2020 г. 12:58

Добрый день.
Вам тут явно JavaScript не хватает. На фронтенде должен быть JS код, который при выборе одной категории будет посылать запрос на сервер, чтобы забрать все подкатегории.

    u
    • 28 апреля 2020 г. 13:19

    Темный лес))
    Если пойду в сторону DRF + Vuejs = смогу решить данную задачу?

      Evgenii Legotckoi
      • 28 апреля 2020 г. 13:41

      DRF тут будет к месту, Vuejs наверное тоже, но я с ним не работал.
      А так да, это по сути та связка, которая вам нужна, ну может jQuery ещё, чтобы запрос послать на сервер. Не знаю как с запросами обстоят дела в Vuejs

        u
        • 28 апреля 2020 г. 14:25

        А если не Vuejs, то что посоветуете?

          Evgenii Legotckoi
          • 28 апреля 2020 г. 14:30

          да я бы и рад, что посоветовать, но мне пока что хватало jQuery... Ещё одна интересная штука есть - это nunjucks, тоже шаблонизатор, но с синтаксисом, как у Django. Должно быть удобно. Но запросы опять же нужно будет делать скорее всего через jQuery, впрочем там ничего сложного нет.

            Комментарии

            Только авторизованные пользователи могут публиковать комментарии.
            Пожалуйста, авторизуйтесь или зарегистрируйтесь
            • Последние комментарии
            • Evgenii Legotckoi
              16 апреля 2025 г. 17:08
              Благодарю за отзыв. И вам желаю всяческих успехов!
            • IscanderChe
              12 апреля 2025 г. 17:12
              Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
            • AK
              1 апреля 2025 г. 11:41
              Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
            • Evgenii Legotckoi
              9 марта 2025 г. 21:02
              К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
            • VP
              9 марта 2025 г. 16:14
              Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…