class catagory(MPTTModel):
    STATUS = (('true', 'true'), ('false', 'false'))
    parent = TreeForeignKey('self',
                            blank=True,
                            null=True,
                            related_name='children',
                            on_delete=models.CASCADE)
    title = models.CharField(max_length=30)
    keyword = models.CharField(max_length=255)
    description = models.CharField(max_length=255)
    image = models.ImageField(blank=True, upload_to='images/')
    status = models.CharField(max_length=10, choices=STATUS)
    slug = models.SlugField(null=False, unique=True)
    parent = models.ForeignKey('self',
                               blank=True,
                               null=True,
                               related_name='children',
                               on_delete=models.CASCADE)
    create_at = models.DateTimeField(auto_now_add=True)
    update_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

    class MPTTMeta:
        order_insertion_by = ['title']

    def get_absolute_url(self):
        return reverse('category_detail', kwargs={'slug': self.slug})

    def __str__(self):
        full_path = [self.title]
        k = self.parent
        while k is not None:
            full_path.append(k.title)
            k = k.parent
        return '/'.join(full_path[::-1])
Exemple #2
0
class Category(MPTTModel):
    STATUS = (
        ('True', 'Evet'),
        ('False', 'Hayır'),
    )
    title = models.CharField(max_length=100)
    keywords = models.CharField(max_length=255)
    description = models.CharField(max_length=255)
    image = models.ImageField(blank=True, upload_to='images/')
    status = models.CharField(max_length=10, choices=STATUS)
    slug = models.SlugField(null=False, unique=True)
    parent = TreeForeignKey('self',
                            blank=True,
                            null=True,
                            related_name='children',
                            on_delete=models.CASCADE)
    create_at = models.DateTimeField(auto_now_add=True)
    update_at = models.DateTimeField(auto_now=True)

    class MPTTMeta:
        order_insertion_by = ['title']

    def __str__(self):
        full_path = [self.title]
        k = self.parent
        while k is not None:
            full_path.append(k.title)
            k = k.parent
        return ' -> '.join(full_path[::-1])

    def image_tag(self):
        return mark_safe('<img src="{}" height="50"/>'.format(self.image.url))

    image_tag.short_description = 'Image'

    def get_absolute_url(self):
        return reverse('category_detail', kwargs={'slug': self.slug})
Exemple #3
0
class Menu(MPTTModel):
    STATUS = (('True', 'Evet'), ('False', 'Hayır'))
    prent = TreeForeignKey('self',
                           blank=True,
                           null=True,
                           related_name='children',
                           on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    link = models.CharField(max_length=255)
    status = models.CharField(max_length=10, choices=STATUS)
    create_at = models.DateTimeField(auto_now_add=True)
    update_at = models.DateTimeField(auto_now=True)

    class MPTTMeta:
        order_insertion_by = ['title']

    def __str__(self):
        full_path = [self.title]
        k = self.parent
        while k is not None:
            full_path.append(k.title)
            k = k.parent
        return '/'.join(full_path[::-1])
        return self.title
Exemple #4
0
class IndexInstanceNode(MPTTModel):
    parent = TreeForeignKey('self', null=True, blank=True)
    index_template_node = models.ForeignKey(IndexTemplateNode, related_name='node_instance', verbose_name=_('Index template node'))
    value = models.CharField(max_length=128, blank=True, verbose_name=_('Value'))
    documents = models.ManyToManyField(Document, related_name='node_instances', verbose_name=_('Documents'))

    def __unicode__(self):
        return self.value

    def index(self):
        return self.index_template_node.index

    @models.permalink
    def get_absolute_url(self):
        return ('indexing:index_instance_node_view', [self.pk])

    @property
    def children(self):
        # Convenience method for serializer
        return self.get_children()

    class Meta:
        verbose_name = _('Index node instance')
        verbose_name_plural = _('Indexes node instances')
Exemple #5
0
class MenuItem(MPTTModel):
    """
    """
    objects = MenuItemManager()
    published = PublishedManager()

    title = models.CharField(max_length=150)
    url = models.CharField(max_length=400, null=True, blank=True)

    parent = TreeForeignKey('self',
                            null=True,
                            blank=True,
                            related_name='children',
                            on_delete=models.CASCADE)

    target = models.PositiveSmallIntegerField(
        choices=settings.MENU_TARGET_CHOICES,
        default=settings.MENU_TARGET_SELF)

    sort_order = models.PositiveIntegerField()
    is_published = models.BooleanField(default=True)

    class Meta:
        verbose_name = "Menu Item"
        verbose_name_plural = "Menu Items"
        ordering = ['sort_order']

    class MPTTMeta:
        order_insertion_by = ['sort_order']

    def __unicode__(self):
        return self.title

    def save(self, *args, **kwargs):
        super(MenuItem, self).save(*args, **kwargs)
        MenuItem.objects.rebuild()
class Menu(MPTTModel):
    parent = TreeForeignKey('self',
                            blank=True,
                            null=True,
                            related_name='children',
                            on_delete=models.CASCADE)
    title = models.CharField(max_length=100, unique=True)
    link = models.CharField(max_length=100, blank=True)

    status = models.CharField(max_length=5, choices=STATUS)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class MPTTMeta:
        level_attr = 'mptt_level'
        order_insertion_by = ['title']

    def __str__(self):
        full_path = [self.title]
        prnt = self.parent
        while prnt is not None:
            full_path.append(prnt.title)
            prnt = prnt.parent
        return ' -> '.join(full_path[::-1])
Exemple #7
0
class Message(MPTTModel):
    TYPE_MESSAGE = 'message'
    TYPE_INVITATION = 'invitation'
    TYPE_INVITATION_RESPONSE = 'invitation_response'
    TYPES = (
        (TYPE_MESSAGE, TYPE_MESSAGE),
        (TYPE_INVITATION, TYPE_INVITATION),
        (TYPE_INVITATION_RESPONSE, TYPE_INVITATION_RESPONSE),
    )

    parent = TreeForeignKey('self',
                            related_name='child',
                            null=True,
                            blank=True,
                            db_index=True)
    recipient = models.ForeignKey(User, related_name='received_messages')
    sender = models.ForeignKey(User, related_name='sent_messages')
    is_read = models.BooleanField(default=False)
    content = models.TextField(default='', blank=True)
    type = models.CharField(max_length=30, choices=TYPES, default=TYPE_MESSAGE)

    created_date = models.DateTimeField(auto_now_add=True)
    modified_date = models.DateTimeField(auto_now=True)

    class MessageQuerySet(QuerySet):
        def my_last_replies(self, request):
            roots = Message.objects.root_nodes()
            my_roots = roots.filter(
                Q(sender=request.user) | Q(recipient=request.user))
            leaves = [
                root.get_descendants(include_self=True).last()
                for root in my_roots
            ]
            return Message.objects.filter(pk__in=[leaf.id for leaf in leaves])

    objects2 = MessageQuerySet.as_manager()
Exemple #8
0
class SystemConfig(MPTTModel, BaseModel, UsableStatus):
    name = models.CharField(u"键", max_length=255, unique=True)
    value = models.CharField(u"值", max_length=255)
    title = models.CharField(u"描述", max_length=255)
    parent = TreeForeignKey('self',
                            verbose_name=u'父配置项',
                            related_name='children',
                            db_index=True,
                            **DICT_NULL_BLANK_TRUE)
    status = models.PositiveSmallIntegerField(u'状态',
                                              choices=UsableStatus.STATUS,
                                              default=UsableStatus.USABLE,
                                              db_index=True)

    def __unicode__(self):
        return u"%s" % self.value

    def get_absolute_url(self):
        return reverse('adminlte:common_detail_page',
                       kwargs={
                           'app_name': self._meta.app_label,
                           'model_name': self._meta.model_name,
                           'pk': self.id
                       })

    class Meta:
        verbose_name_plural = verbose_name = u"参数配置"

    class MPTTMeta:
        order_insertion_by = ['name']

    class Config:
        list_template_name = 'adminlte/systemconfig_list.html'
        list_display_fields = ('name', 'parent', 'value', 'title', 'id')
        list_form_fields = ('parent', 'name', 'value', 'title', 'id')
        search_fields = ('name', 'value', 'title')
class Category(MPTTModel):
    uuid = models.UUIDField(primary_key=True,
                            default=uuid.uuid4,
                            editable=False,
                            unique=True)

    name = models.CharField(_('name'), max_length=40)

    parent = TreeForeignKey('self',
                            null=True,
                            blank=True,
                            related_name='children',
                            db_index=True)

    channel = models.ForeignKey('Channel',
                                verbose_name=_('channel'),
                                related_name='categories')

    class Meta:
        verbose_name = _('category')
        verbose_name_plural = _('categories')

    def __str__(self):
        return self.name
Exemple #10
0
class Comment(MPTTModel):
    """
    多级评论表
    """
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                             on_delete=models.CASCADE,
                             related_name='user_comments')
    video = models.ForeignKey(Video,
                              on_delete=models.CASCADE,
                              related_name='video_comments',
                              blank=True,
                              null=True)
    parent = TreeForeignKey('self',
                            on_delete=models.CASCADE,
                            blank=True,
                            null=True,
                            related_name='replies')
    content = models.TextField()
    like_user = models.ManyToManyField(settings.AUTH_USER_MODEL,
                                       related_name='like_comments',
                                       blank=True)
    like_number = models.PositiveIntegerField(default=0)
    created = models.DateTimeField(auto_now_add=True, db_index=True)

    class MPTTMeta:
        order_insertion_by = ('-created', )

    class Meta:
        verbose_name = '评论'
        verbose_name_plural = verbose_name

    def __str__(self):
        if self.parent is not None:
            return '{0} 回复 {1}'.format(self.user, self.parent.user)
        else:
            return '{0} 评论了 {1}'.format(self.user, self.video)
Exemple #11
0
class IndexInstance(MPTTModel):
    parent = TreeForeignKey('self',
                            null=True,
                            blank=True,
                            related_name='index_meta_instance')
    index = models.ForeignKey(Index, verbose_name=_(u'index'))
    value = models.CharField(max_length=128,
                             blank=True,
                             verbose_name=_(u'value'))
    documents = models.ManyToManyField(Document, verbose_name=_(u'documents'))

    def __unicode__(self):
        return self.value

    @models.permalink
    def get_absolute_url(self):
        return ('index_instance_list', [self.pk])

    def get_document_list_display(self):
        return u', '.join([d.file_filename for d in self.documents.all()])

    class Meta:
        verbose_name = _(u'index instance')
        verbose_name_plural = _(u'indexes instances')
class Comment(DateParent, MPTTModel):
    text = models.TextField()
    user_id = models.ForeignKey(to=settings.AUTH_USER_MODEL,
                                on_delete=models.CASCADE,
                                null=True)

    # level = models.CharField(max_length=255, default='')
    # lft = models.CharField(max_length=255, default='')
    # rght = models.CharField(max_length=255, default='')
    # tree_id = models.IntegerField(default=1)

    content_type = models.ForeignKey(ContentType,
                                     on_delete=models.CASCADE,
                                     related_name='comments')
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')
    parent = TreeForeignKey('self',
                            on_delete=models.CASCADE,
                            null=True,
                            blank=True,
                            related_name='children')

    class MPTTMeta:
        order_insertion_by = ['date_create']
Exemple #13
0
class Ranking(MPTTModel):
    name = models.CharField(max_length=50, verbose_name=u'名称')
    order = models.IntegerField(default=0, verbose_name=u'排序')
    status = models.IntegerField(default=1, verbose_name=u'状态')
    create_time = models.DateTimeField(auto_now_add=True, verbose_name=u'创建时间')
    update_time = models.DateTimeField(auto_now=True, verbose_name=u'修改时间')
    del_flag = models.IntegerField(default=0, verbose_name=u'删除')
    parent = TreeForeignKey('self',
                            null=True,
                            blank=True,
                            related_name='children',
                            db_index=True)

    class Meta:
        db_table = "t_ranking"
        verbose_name = u"排行"
        verbose_name_plural = u"排行"

    def __unicode__(self):
        return self.name

    def get_top_three_books(self):
        return Book.objects.filter(
            rankingconfig__item=self).order_by('rankingconfig__order')[:3]
Exemple #14
0
class Category(MPTTModel):
    STATUS = (
        ('True', 'True'),
        ('False', 'False'),
    )
    parent = TreeForeignKey('self',
                            blank=True,
                            null=True,
                            related_name='children',
                            on_delete=models.CASCADE)
    title = models.CharField(max_length=50)
    keywords = models.CharField(max_length=255)
    description = models.TextField(max_length=255)
    image = models.ImageField(blank=True, upload_to='images/')
    status = models.CharField(max_length=10, choices=STATUS)
    slug = models.SlugField(null=False, unique=True)
    create_at = models.DateTimeField(auto_now_add=True)
    update_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

    class MPTTMeta:
        order_insertion_by = ['title']
Exemple #15
0
class ProjectModule(MPTTModel, BaseModel):
    """
    业务模块
    """
    parent = TreeForeignKey('self',
                            verbose_name='上级业务模块',
                            null=True,
                            blank=True,
                            related_name='children',
                            db_index=True)
    name = models.CharField(max_length=255,
                            blank=True,
                            null=True,
                            verbose_name="业务模块名称")

    class MPTTMeta:
        parent_attr = 'parent'

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "业务模块"
        verbose_name_plural = verbose_name
Exemple #16
0
class Department(MPTTModel):
    """部门"""

    parent = TreeForeignKey('self',
                            on_delete=models.CASCADE,
                            related_name='child',
                            verbose_name='父亲ID',
                            null=True,
                            blank=True)
    name = models.CharField(max_length=100, verbose_name='部门名称')
    desc = models.TextField(max_length=100, verbose_name='部门描述')
    is_active = models.BooleanField(default=True, verbose_name='是否激活')
    created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
    has_child = JSONField(default=[], verbose_name='子级菜单')

    class Meta:
        verbose_name_plural = verbose_name = '菜单'

    class MPTTMeta:
        order_insertion_by = ['name']

    def __str__(self):
        return self.name
Exemple #17
0
class Category(MPTTModel):
    '''Модель категорий'''
    name = models.CharField(verbose_name='Имя', max_length=100)
    slug = models.SlugField("Url", max_length=100, unique=True)
    description = models.TextField('Описание', max_length=100, default='', blank=True)
    def __str__(self):
        return self.name
    class Meta:
        verbose_name= 'Категория'
        verbose_name_plural='Категории'
    parent = TreeForeignKey(
        'self',
        verbose_name='Родительская категория',
        on_delete=models.CASCADE,
        null=True,
        blank=True,
        related_name='children'
    )
    template = models.CharField('Шаблон', max_length=100, default='blog/post_list.html')
    published = models.BooleanField('Отображать?', default=True)
    paginated = models.PositiveIntegerField('Колличество новостей на странице', default=5)
    sort = models.PositiveIntegerField('Порядок', default=0)
    def get_absolute_url(self):
        return reverse('category', kwargs = {'category_slug': self.slug})
Exemple #18
0
class Category(MPTTModel):
    title = models.CharField(max_length=120, verbose_name='Название')
    slug = models.SlugField(blank=True, max_length=120)
    image = models.ImageField(upload_to=category_photo,
                              verbose_name='Изображение',
                              blank=True,
                              default='default/photo_product.jpg',
                              max_length=500)
    author = models.ForeignKey(User,
                               on_delete=models.DO_NOTHING,
                               verbose_name="Автор",
                               related_name='category')
    parent = TreeForeignKey('Category',
                            on_delete=models.CASCADE,
                            null=True,
                            verbose_name="Родительская категория",
                            blank=True,
                            related_name='children')

    class MPTTMeta:
        order_insertion_by = ['id']

    def save(self, *args, **kwargs):
        if self.pk is None:
            super(Category, self).save(*args, **kwargs)

        self.slug = create_slug(self.title, self.id)
        with Category.objects.disable_mptt_updates():
            super(Category, self).save(*args, **kwargs)
        Category.objects.rebuild()

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('catalog', kwargs={'category': self.slug})
Exemple #19
0
class MPTTSEOModel(SEOMixin, MPTTModel):
    name = models.CharField('Название', max_length=250, default='')
    slug = models.SlugField('URL', max_length=250, default='', blank=True)
    parent = TreeForeignKey('self',
                            on_delete=models.CASCADE,
                            related_name='children',
                            blank=True,
                            null=True,
                            verbose_name='Родитель')
    url = models.CharField('Полный URL',
                           max_length=255,
                           default='',
                           blank=True)

    class Meta:
        abstract = True

    def __str__(self):
        return self.name

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.name)
        super().save(*args, **kwargs)
class AssetCategory(MPTTModel, TimeTrackable, EditorTrackable,
                    WithConcurrentGetOrCreate):
    name = models.CharField(max_length=50, unique=True)
    type = models.PositiveIntegerField(
        verbose_name=_("type"),
        choices=AssetCategoryType(),
    )
    is_blade = models.BooleanField()
    parent = TreeForeignKey(
        'self',
        null=True,
        blank=True,
        related_name='children',
    )

    class MPTTMeta:
        order_insertion_by = ['name']

    class Meta:
        verbose_name = _("Asset category")
        verbose_name_plural = _("Asset categories")

    def __unicode__(self):
        return self.name
Exemple #21
0
class Ingredient(MPTTModel):
    name = models.CharField(max_length=64, unique=True)
    ubiquitous = models.BooleanField(default=False)
    # Add substitutes later? substitutes = models.ManyToManyField(to="self", related_name="substitutes", blank=True)
    parent = TreeForeignKey('self',
                            blank=True,
                            null=True,
                            related_name='children',
                            on_delete=SET_NULL)

    def object_already_in_family(self, field, object_id):
        family = self.get_ancestors() | self.get_children()
        filter_dict = {'id': object_id}
        for ingredient in family:
            if ingredient.__getattribute__(field).filter(
                    **filter_dict).exists():
                return True
        return False

    def __str__(self):
        return self.name

    class Meta:
        ordering = ('name', )
Exemple #22
0
class Bookmark(MPTTModel):
    parent = TreeForeignKey('self',
                            null=True,
                            blank=True,
                            related_name='children',
                            db_index=True,
                            on_delete=models.CASCADE)

    ordinal = models.IntegerField()
    title = models.CharField(max_length=300)

    class Meta:
        unique_together = (('parent', 'ordinal'), )

    class MPTTMeta:
        order_insertion_by = ['ordinal']

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('bookmarks:detail', args=[str(self.id)])

    def walk(self):
        for c in self.get_children():
            d = {
                'title': c.title,
                'ordinal': c.title,
            }
            l = list(c.walk())
            if l:
                d['children'] = l
            l = list(c.rows.values_list('ordinal', flat=True))
            if l:
                d['rows'] = l
            yield d
Exemple #23
0
class CompanyStructure(MPTTModel):
    title = models.CharField('Название',max_length=100, unique=True, default=uuid.uuid4)
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True,
                            verbose_name='Кому подчиняется')
    fo_department = models.ForeignKey('Department', on_delete=models.ProtectedError,
                                      verbose_name='Отдел', null=True, blank=True )
    fo_book_position = models.ForeignKey('ReferenceBookPosition', on_delete=models.ProtectedError,
                                         verbose_name='Должность', null=True, blank=True )
    fo_profile = models.ForeignKey('Profile', on_delete=models.ProtectedError,
                                   verbose_name='ФИО', null=True, blank=True )

    @property
    def title_for_admin(self):
        return "%s %s %s" % (self.fo_department, self.fo_book_position, self.fo_profile)

    class MPTTMeta:
        order_insertion_by = ['title']

    class Meta:
        verbose_name = 'Структура компании'
        verbose_name_plural = 'Структура компании'

    def __str__(self):
        return  '%s %s %s' % (self.fo_department, self.fo_book_position, self.fo_profile)
Exemple #24
0
class SwappedInModel(MPTTModel):
    parent = TreeForeignKey(
        'self', null=True, blank=True, related_name='children',
        on_delete=models.CASCADE)
    name = models.CharField(max_length=50)
Exemple #25
0
class MultiTableInheritanceB2(MultiTableInheritanceB1):
    parent = TreeForeignKey(
        'self', null=True, blank=True, related_name='children',
        on_delete=models.CASCADE)
Exemple #26
0
class ReferencingModel(models.Model):
    fk = TreeForeignKey(Category, related_name='+', on_delete=models.CASCADE)
    one = TreeOneToOneField(Category, related_name='+', on_delete=models.CASCADE)
    m2m = TreeManyToManyField(Category, related_name='+')
Exemple #27
0
class Tree(MPTTModel):
    parent = TreeForeignKey(
        'self', null=True, blank=True, related_name='children',
        on_delete=models.CASCADE)
Exemple #28
0
    parent = TreeForeignKey(
        'self', null=True, blank=True, related_name='children',
        on_delete=models.CASCADE)
    now = models.DateTimeField(auto_now_add=True)

    class MPTTMeta:
        order_insertion_by = ('now',)


# test registering of remote model
class Group(models.Model):
    name = models.CharField(max_length=100)


TreeForeignKey(
    Group, blank=True, null=True, on_delete=models.CASCADE
).contribute_to_class(Group, 'parent')
mptt.register(Group, order_insertion_by=('name',))


class Book(MPTTModel):
    parent = TreeForeignKey(
        'self', null=True, blank=True, related_name='children',
        on_delete=models.CASCADE)

    name = models.CharField(max_length=50)
    fk = TreeForeignKey(
        Category, null=True, blank=True, related_name='books_fk',
        on_delete=models.CASCADE)
    m2m = TreeManyToManyField(Category, blank=True, related_name='books_m2m')
Exemple #29
0
class UniqueTogetherModel(MPTTModel):
    class Meta:
        unique_together = (('parent','code',),)
    parent = TreeForeignKey('self', null=True, on_delete=models.CASCADE)
    code = models.CharField(max_length=10)
Exemple #30
0
class Article(models.Model):
    name = models.CharField(max_length=50)
    category = TreeForeignKey(Rubric, on_delete=models.PROTECT)

    def __str__(self):
        return self.name
Exemple #31
0
from django.contrib.comments.models import Comment
from django.db import models
import mptt
from mptt.fields import TreeForeignKey

from managers import TreeCommentManager


__all__ = ['Comment']

treefk = TreeForeignKey(Comment, blank=True, null=True, related_name='children')
treefk.contribute_to_class(Comment, 'parent')
title = models.CharField(blank=True, null=True, max_length=255)
title.contribute_to_class(Comment, 'title')
Comment.objects = TreeCommentManager()
Comment.objects.model = Comment
mptt.register(Comment)