标签: django-mptt

使用 django-mptt 制作 FeinCMS 页面树的副本更改子顺序

我正在尝试制作使用 django-mptt 管理的 FeinCMS 页面树的副本。我写了这个函数:

def make_tree_copy(page, parent=None):
    '''
    Makes a copy of the tree starting at "page", reparenting it to "parent"
    '''
    new_page = Page.objects.create_copy(page)
    new_page.save()
    Page.tree.move_node(new_page, parent)

    # re-read so django-mptt fields get updated
    new_page = Page.objects.get(id=new_page.id)
    for child in page.get_children():
        # re-read so django-mptt fields get updated
        child = Page.objects.get(id=child.id)
        make_tree_copy(child, new_page)
Run Code Online (Sandbox Code Playgroud)

并调用它使用

make_tree_copy(Page.tree.root_nodes()[0])
Run Code Online (Sandbox Code Playgroud)

它一般有效,但是当我有一个看起来像这样的页面树时:

A
|- B
   |- C
   |- D
Run Code Online (Sandbox Code Playgroud)

它出来是这样的:

A
|- B
   |- D
   |- C
Run Code Online (Sandbox Code Playgroud)

从我逐步完成 mptt 代码来看,神奇似乎发生在 mptt/managers.py/_inter_tree_move_and_close_gap() 中,由于某种原因,孙子的“lft”值发生了变化。在移动之前它们是 C=3,D=5,之后它们是 C=5,D=3。 …

django mptt django-mptt feincms

2
推荐指数
1
解决办法
1516
查看次数

操作错误 - 没有这样的表 - Django,mptt

我在Django遇到了一个与DB有关的问题,我不明白.

我定义了一个MPTT模型:

class Image(MPTTModel):
    name = models.CharField(max_length=50)
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children')

    def __unicode__(self):  
        return self.name

    def rank(self):         leaves = self.get_leafnodes()       if leaves:          rank = leaves[0].get_level() - self.get_level()         else:           rank = 0        return rank

mptt.register(Image, order_insertion_by=['name'])
Run Code Online (Sandbox Code Playgroud)

然后在我的视图中,我尝试使用模型的一些语句,并得到一个OperationalError.

def index(request):

    if request.method == 'POST': 
        image_string = request.POST.get('get_image')
        index = image_string.find('(')
        if index == -1:
            parent = image_string
            child = None
        else:
            parent = image_string[0:index]
            child = image_string[index+1:len(image_string)-1]       
        try:
            images = Image.objects.all()
            image_names = [a.name for a in images]     
        except Image.DoesNotExist: …
Run Code Online (Sandbox Code Playgroud)

python sqlite django django-mptt operationalerror

2
推荐指数
1
解决办法
1万
查看次数

如何过滤外键 MPTT 模型的所有后代?

这是情况。我在 Django 中使用 MPTT 模型来创建音乐流派(摇滚、硬摇滚等)的层次结构。我正在将此层次结构的节点之一分配给相册。假设我创建了一个具有 Hard Rock 流派的专辑对象。如何查询我的专辑以获取所有摇滚专辑并使其包含摇滚和摇滚类型的所有后代?

class Genre(MPTTModel):
    name = models.CharField(max_length=50, unique=True)
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children')

    class MPTTMeta:
        order_insertion_by = ['name']

    def __unicode__(self):
        return self.name


class Album(models.Model):
    name= models.CharField(max_length=200)
    genre= models.ForeignKey(Genre)
Run Code Online (Sandbox Code Playgroud)

django django-models django-mptt

2
推荐指数
1
解决办法
778
查看次数

django-parler 在管理中不显示标签

出于某种原因,我在添加到管理员时没有看到任何语言选项卡。我正在使用 Django 1.9.10。我正在使用 django-hvad 但决定尝试 parler。我在一个新项目中尝试了完全相同的代码并且它有效,但在我现有的项目中却没有。请注意,我也在使用 django-mptt。在与 mptt 模型不同的模型中尝试 parler,反之亦然。

settings/base.py

# Translations
gettext = lambda s: s
LANGUAGES = (
    ('en', gettext('English')),
    ('ar', gettext('Arabic')),
)

LOCALE_PATHS = (
    os.path.join(BASE_DIR, "locale"),
)

# # Parler Configuration
PARLER_LANGUAGES = {
    None: (
        {'code': 'ar', },
        {'code': 'en',},
    ),
    'default': {
        'fallback': 'ar',             # defaults to PARLER_DEFAULT_LANGUAGE_CODE
        'hide_untranslated': False,   # the default; let .active_translations()       return fallbacks too.
    }
}
PARLER_DEFAULT_LANGUAGE_CODE = 'ar'
Run Code Online (Sandbox Code Playgroud)

模型

class Category(MPTTModel, TranslatableModel):
    slug = models.SlugField(max_length=50, unique=True, null=True, blank=True) …
Run Code Online (Sandbox Code Playgroud)

django django-mptt django-parler

2
推荐指数
1
解决办法
1176
查看次数

VariableDoesNotExist at /list/ 在 u"[ 中查找关键 [节点] 失败

我的 Django MPTT 模型有问题

class Catalog(MPTTModel):
name = models.CharField(verbose_name='name',max_length=256,blank=True  )
name_slug = models.CharField(verbose_name='Name_slug',max_length=250,blank=True)
parent = TreeForeignKey('self',null=True,blank=True,related_name='children')

class MPTTMeta:
    order_insertion_by = ['name']
def __unicode__(self):
    return u"%s %s %s " %(self.name,self.name_slug,self.parent)
def __str__(self):
    return u"%s %s %s " %(self.name,self.name_slug,self.parent
    def get_absolute_url(self):
        return reverse("catalog",kwargs={"slug":self.name_slug})
Run Code Online (Sandbox Code Playgroud)

现在,我在 base.html 中使用 MPTT,如下所示:

<ul class="root">
{% recursetree nodes %}
    <li>
        <a href="{{ node.get_absolute_url }}">{{ node.name }}</a>
        {% if not node.is_leaf_node %}
            <ul class="children">
                <a href="{{ children.get_absolute_url }}">{{ children }}</a>
            </ul>
        {% endif %}
    </li>
{% endrecursetree %}
Run Code Online (Sandbox Code Playgroud)

但是,当我使用 …

python django django-mptt

1
推荐指数
1
解决办法
1781
查看次数

在 Django Mptt 中找到二级儿童

我有一个模型,它有一个这样的字段:

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

我想将父级添加到选择框中,然后使用 onclick 选择第二级子级。

parent1
-section1
--child1

parent2
-section2
--child2
Run Code Online (Sandbox Code Playgroud)

我已经尝试了所有的东西。(level__gt), (level__lt) ....我已经阅读了 django-mptt 文档。怎么接二胎?我不想使用 ul 和 li。我想在一个选择中添加所有父母,然后通过点击获取第二个孩子给父母。

任何帮助,将不胜感激。

javascript django django-mptt

0
推荐指数
1
解决办法
1146
查看次数

MPTT模型创建在数据迁移中失败

我已经编写了一个数据迁移文件,用于为MPTT模型创建一些初始数据。

但是创作失败了

def create_foo(apps, schema_editor):
    db_alias = schema_editor.connection.alias
    logger = logging.getLogger(__name__)

    Foo = apps.get_model("app", "Foo")

    for attr in ROLES:
        try:
            foo = Foo.objects.using(db_alias).get(name=attr[0])
    except Foo.DoesNotExist:
        parent = Foo.objects.using(db_alias).get(name=attr[1]) if attr[1] else None
        if parent:
            foo = Foo.objects.create(name=attr[0], parent=parent)
        else:
            foo = Foo.objects.using(db_alias).create(name=attr[0])
        logger.info("Created foo - %s" % foo)
Run Code Online (Sandbox Code Playgroud)

我在执行以下代码时遇到错误,有什么想法吗?

foo = Foo.objects.using(db_alias).create(name=attr[0])

文件“ /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/MySQLdb/connections.py”,行36,在defaultErrorhandler中引发错误类,错误值django.db.utils.IntegrityError:( 1048,“列'lft'不能为空”

django-mptt django-migrations

0
推荐指数
1
解决办法
324
查看次数