Форум сайта python.su
Как получить потомков связанных моделей в Django И как получить Родителей моделей:) models: # -*- coding: utf-8 -*- import mptt from django.db import models from mptt.models import MPTTModel, TreeForeignKey class Category(MPTTModel): category_name = models.CharField(max_length=50, unique=True, verbose_name='Название категории') parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='categories', db_index=True, verbose_name=u'РОДИТЕЛЬСКИЙ класс') def __unicode__(self): return self.category_name class Meta: db_table = 'categoryi' verbose_name = 'Категории' class MPTTMeta: level_attr = 'mptt_level' order_insertion_by = ['category_name'] mptt.register(Category, order_insertion_by=['category_name'] class Produkt(MPTTModel): product_name = models.CharField(max_length=128, blank=True, null=True, verbose_name='Название продукта') # seo_keywords_title = models.CharField(max_length=256, blank=True, null=True, # verbose_name='Заголовок к описанию (Ключевое Слово)) preview_text = models.TextField(blank=True, null=True, verbose_name='Текст на главной стр-це с фото preview_image') preview_image = models.ImageField(blank=True, null=True, upload_to='media.doors.preview_image_doors', verbose_name='фото на гланой стр-це с текстом preview_text ') detail_image = models.ImageField(blank=True, null=True, upload_to='media.doors.detail_image_doors', verbose_name='Все фото дверей') price = models.FloatField(blank=True, null=True, default=0.0, verbose_name='Цена') sale = models.FloatField(blank=True, null=True, default=0.0) active = models.BooleanField(default=True) parent = TreeForeignKey(Category, blank=True, null=True, related_name='child_product') def __unicode__(self): return self.product_name class MPTTMeta: level_attr = 'mptt_level' order_insertion_by = ['product_name'] class Meta: verbose_name = u'Продукт' verbose_name_plural = u'продукты' db_table = 'product' Как это организовать в views.py, urls.py и html
Отредактировано id_admin (Сен. 17, 2017 12:21:30)
Офлайн
В официальной документации хорошо описаны методы,
которые позволяют достичь чего вы хотите.
В данном случае, видимо должно быть так:
parent = TreeForeignKey(Category, blank=True, null=True, related_name='child_product') # вместо этой строки, пожалуй, должно быть category = models.ForeignKey(Category, blank=True, null=True, related_name='product') # Теперь, если у нас есть категория (конкретная) и мы хотим получить все продукты ей соответствующие, то: #views.py from .models import Product, Category # Вы должны определить здесь category_instance, относительно которого ищутся продукты all_products_under_the_cat = Product.objects.filter(category__in=category_instance.get_descendants(include_self=True))
Отредактировано scidam (Сен. 17, 2017 12:55:12)
Офлайн