Найти - Пользователи
Полная версия: Как получить потомков связанных моделей в Django
Начало » Django » Как получить потомков связанных моделей в Django
1
id_admin
 Как получить потомков связанных моделей в 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
scidam
В официальной документации хорошо описаны методы,
которые позволяют достичь чего вы хотите.

В данном случае, видимо должно быть так:

  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))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB