Как показать потомка родителя в шаблоне? - PullRequest
2 голосов
/ 17 июня 2019

У меня есть следующие модели:

class Category(models.Model):
    cat_image = models.ImageField(upload_to='Category',null=True, blank=True)
    cat_title = models.CharField(max_length=250)
    cat_overview = models.CharField(max_length=500)
    cat_slug = models.SlugField(unique=True)


class SubCategory(models.Model):
    sub_cat_image = models.ImageField(upload_to='SubCategory',null=True, blank=True)
    sub_cat_title = models.CharField(max_length=255)
    sub_cat_overview = models.CharField(max_length=500)
    sub_cat_parent = models.ForeignKey(Category, on_delete=models.CASCADE)
    sub_cat_slug = models.SlugField(unique=True)


class SubSubCategory(models.Model):
    subsub_cat_title = models.CharField(max_length=150)
    subsub_cat_parent = models.ForeignKey(SubCategory, on_delete = models.CASCADE)
    subsub_cat_slug = models.SlugField(unique=True)

Я уже заполнил эти модели некоторыми данными, и у меня нет проблем с отображением модели Category в шаблонах, но возникает проблема, когда я хочу показать SubCategory и SubSubCategory одновременно в одном шаблоне.

enter image description here

это категории, но когда я нажимаю, например, "Python".Эти страницы показывают:

enter image description here

проблема, как вы можете видеть в приведенном выше коде, состоит в том, что только python syntax, Python Variables и Python loops принадлежатдо Python Basic не Python Files и Python Logs.Как избежать этого и показывать только связанные SubSubCategory экземпляры SubCategory модели?

Коды, связанные с изображением выше:

views.py

def home(request):
    return render(request, 'tutorials/home.html', {'categories':Category.objects.all()})


def sub_cat(request, category):
    sub_cats = SubCategory.objects.filter(sub_cat_parent__cat_slug=category)
    subsub_cats = SubSubCategory.objects.filter(subsub_cat_parent__sub_cat_parent__cat_slug = category)

    context = {
        'sub_cats': sub_cats,
        'subsub_cats': subsub_cats,
    }
    return render(request, 'tutorials/sub_cat.html', context)

и sub_cat.html

<div class="row">
    <div class="col-md-3">
        <div class="sidenav">
                {% for sub_cat in sub_cats %}
                        <button class="dropdown-btn"> {{ sub_cat.sub_cat_title }} 
                                <i class="fa fa-caret-down"></i>
                        </button>
                        <div class="dropdown-container">
                                {% for subsub_cat in subsub_cats %}
                                        <a href="#">{{ subsub_cat.subsub_cat_title }}</a>
                                {% endfor %}
                        </div>
                {% endfor %}
        </div>
    </div>  
    <div class="col-md-9">
        <h2>Learn Python</h2>
        <p>
        Authoritatively ....
        </p>
</div>

Пожалуйста, помогите мне с этим спасибо.

edit: Если вы знаете лучший способ, чем этот метод, поэтому, пожалуйста, помогите мне.

1 Ответ

1 голос
/ 17 июня 2019

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

{% for subsub_cat in sub_cat.subsubcategory_set.all %}
    <a href="#">{{ subsub_cat.subsub_cat_title }}</a>
{% endfor %}

Подробнее об обратной связи вы можете прочитать в Связанных объектах Документация.

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