Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » MPTT Дерево "Категория-товар" в админке [RSS Feed]

#1 Янв. 2, 2014 13:11:10

Dariloff
Зарегистрирован: 2013-11-28
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

MPTT Дерево "Категория-товар" в админке

С ноября не могу сделать отображение в админке в виде:
Категория1
::категория2
::::товар1
::::товар2
Категория3
::товар3

Перепробовал огромное множество разновидностей mptt. feinCMS у меня вообще почему-то не идёт, ругается при добавляении в INSTALLED_APPS. Особо в тему не вникал.
Остановился на django_mptt_admin. Он позволяет использовать drag&drop. Стандартный MPTTModelAdmin дают какой-то совсем убогий отступ:

До этого работал год с самописным вэб-движком на питоне. Там это дерево я бы за 20 минут сделал объединённый sql-запрос и нарисовал всю архитектуру с отступами, с d&d помучался бы пару дней на qjuery, но всё равно бы сделал. Здесь ковыряюсь уже 2й месяц и не продвинулся ни на шаг. Меня предупреждали о головняке, но не думал что я нарвусь на него прямо с ходу. Обычный интернет-магазин и подобная структура в виде иерархии дерева нужна каждому. Иначе попробую, разберись в 10 тыс наименованиях.

models.py

import mptt
from django.db import models
from mptt.models import MPTTModel, TreeForeignKey 
class Folder(MPTTModel):
    name = models.CharField(max_length=255, default='/', verbose_name=u'Имя')
    parent = TreeForeignKey('self', null=True, blank=True,related_name='child')
    def __unicode__(self): 
        return self.name
        
    class MPTTMeta:
        parent_attr = 'parent'
class Product(models.Model):
    parent = models.ForeignKey(Folder, blank=True, null = True, related_name='child_product')
    name = models.CharField(max_length=255, db_index=True, verbose_name=u'Имя')
    price = models.CharField(max_length=8, db_index=True, verbose_name=u'Цена')
    
    def __unicode__(self): 
        return self.name
mptt.register(Folder)
mptt.register(Product)  
admin.py
from offers.models import Product, Folder
from django_mptt_admin.admin import DjangoMpttAdmin
from django.contrib import admin
admin.site.register(Product, DjangoMpttAdmin)
admin.site.register(Folder, DjangoMpttAdmin)

Данный код выдаёт деревья только исключительно внутри одной модели. Т.е.
parent = models.ForeignKey(Folder, blank=True, null = True, related_name='child_product')
лезет не в модель Folder, а ищет свой id, будто первый параметр ‘self’.

Строит архитектуру, будто файл идёт от файла, хотя чёрным по белому написано, что родителя надо смотреть в модели Folder.
Лично мне всё равно у какой модели будет отображаться всё дерево, я уже буду счастлив просто его увидеть. Чтобы были и папки и товары внутри.

Отредактировано Dariloff (Янв. 3, 2014 15:06:20)

Офлайн

  • Начало
  • » Django
  • » MPTT Дерево "Категория-товар" в админке[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version