标签: django-mptt

覆盖使用django-mptt的模型的save()方法

我已经在我的项目中使用django-mptt了一段时间了,这太棒了.最近,我发现需要覆盖使用mptt的模型的save()方法,当我尝试保存该模型的新实例时,我收到错误:

Exception Type: ValueError at /admin/scrivener/page/add/
Exception Value: Cannot use None as a query value
Run Code Online (Sandbox Code Playgroud)

我假设这是因为实例还没有插入树中,但我不确定如何解决这个问题.我在项目跟踪器的类似问题上添加了关于它的评论,但我希望这里的某个人能够更快地把我放在正确的轨道上.

这是追溯.

Environment:

Request Method: POST
Request URL: http://localhost:8000/admin/scrivener/page/add/
Django Version: 1.2 rc 1 SVN-13117
Python Version: 2.6.4
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.admin',
 'django.contrib.sitemaps',
 'mptt',
 'filebrowser',
 'south',
 'haystack',
 'django_static',
 'etc',
 'scrivener',
 'gregor',
 'annunciator']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware')


Traceback:
File "B:\django-apps\3rd Party Source\django\core\handlers\base.py" in get_response
  100.                     response = callback(request, *callback_args, **callback_kwargs)
File "B:\django-apps\3rd Party Source\django\contrib\admin\options.py" in wrapper
  239.                 return self.admin_site.admin_view(view)(*args, **kwargs)
File "B:\django-apps\3rd …
Run Code Online (Sandbox Code Playgroud)

django django-mptt

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

Django-MPTT叶子节点有多种类型

我正在开发一个hirerchical应用程序,其中叶节点可以是不同模型的实例.我无法弄清楚如何使它与django-mptt应用程序一起工作.这个应用程序甚至可以实现吗?如果是的话,我做错了什么?如果没有,那里有什么我想做什么?

以下是模型的基本结构:

class FolderItemBase(MPTTModel):
    order = models.PositiveIntegerField()

    class Meta:
        abstract = True

    class MPTTMeta:
        parent_attr = 'folder'
        order_insertion_by = ['order']

class Folder(FolderItemBase):
    folder = TreeForeignKey('Folder', related_name='folders', blank=True, null=True)
    ...

class Image(FolderItemBase):
    folder = TreeForeignKey('Gallery', related_name='images') # cannot be null since leaf has to be inside of a folder
    ...
Run Code Online (Sandbox Code Playgroud)

当我尝试执行以下操作时,我只能获取"文件夹"子项,而没有任何图像.当我试图获得图像的祖先时也是如此

>>> folder1 = Folder.objects.create(title='Folder 1', order=0)
>>> folder2 = Folder(title='Folder 2', order=0)
>>> folder2.insert_at(folder1, save=True)
>>> image = Image(...)
>>> image.insert_at(folder1, save=True)
>>> folder1.get_children()
[<Folder: Folder 2>]
>>> image.get_ancestores()
[] …
Run Code Online (Sandbox Code Playgroud)

django django-mptt hierarchical-data

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

Django,如何用django-mptt做CRUD?

我们如何使用通用视图django-mptt实现CRUD功能?我搜索了很多,找不到一个教程/示例代码.

假设我们有一个课程层次结构或类别层次结构,或者类似的东西...我们如何添加/删除/更新/读取它们?

比如我有这个模型:

from django.db import models
from mptt.models import MPTTModel , TreeForeignKey


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']
Run Code Online (Sandbox Code Playgroud)

这个views.py:

from django.views.generic.list_detail import object_list
from mp.models import Genre

def genres_list(request):
    ''' Shows all of the genres '''
    return object_list(request,
            queryset = Genre.tree.all() ,
            template_name = 'genres.html' ,
            # template_object_name = 'nodes' …
Run Code Online (Sandbox Code Playgroud)

django crud django-models django-mptt

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

我正在尝试使用django-mptt构建网站导航

我已经使用django-mptt对我要存储我的文章的标题的部分和子部分等进行建模.有些部分和部分会有孩子,有些则不会.例如:

[Home]
 [News]
    [Politics][Crime][Policing]  etc 
 then [News] > [Politics]
                 [UKIP][Labour] etc
Run Code Online (Sandbox Code Playgroud)

我相信你明白了.我创建了Section模型

class Section(MPTTModel):
    name = models.CharField(max_length=50)
    parent = TreeForeignKey('self',null=True, blank=True, related_name='sub_sections')
    tree = SectionTreeManager()
Run Code Online (Sandbox Code Playgroud)

并通过将Section.objects.all()传递到模板中: -

<ul class="headernav" >

    {% recursetree sections %}

        <li>
            <a href="/section/{{node.name}}" >{{ node.name }}</a>

             {% if node.is_leaf_node %}
                <ul  class="headernav"> 
                    {{ children }}
                </ul>
            {% endif %}
           </li>
    {% endrecursetree %}
</ul>
Run Code Online (Sandbox Code Playgroud)

我可以显示所有节点.我想要做的是,根据当前的网址,即/ section/News,获得当前级别的所有兄弟姐妹,以及以下级别的所有祖先和所有相关的后代.所以,如果我选择了新闻,我会得到

[home][**News**][World][Sports][Culture] <- Level 0

[Politics][Crime][Education] <- Children on Level 1
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?任何帮助将非常感激.我正在学习Django,所以如果很明显我会事先道歉.

django django-mptt

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

如何禁用某些模型管理员中mptt的TreeForeignKey字段的Select小部件中的某些选项?

MyModel有一个mptt的TreeForeignKey字段category.在管理员中MyModel,如何在Selectcategory字段的窗口小部件中禁用某些选项?

谢谢

class Category(MPTTModel):
    parent = TreeForeignKey('self', blank=True, null=True, related_name='children')
    nom = models.CharField(max_length=100)

class MyModel(models.Model):
    category = TreeForeignKey(Category)
    # more fields
Run Code Online (Sandbox Code Playgroud)

django django-mptt

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

关于django-mptt的Django-CMS警告

我有一个Django-CMS 2.4.1项目,总是给我警告:

DeprecationWarning: Implicit manager CMSPlugin.tree will be removed in django-mptt 0.6.  Explicitly define a TreeManager() on your model to remove this warning.
Run Code Online (Sandbox Code Playgroud)

这只发生在生产中 - 而不是在开发中.

我试过了:

./manage.py cms fix-mptt
Run Code Online (Sandbox Code Playgroud)

这给了我输出(在与上面相同的警告之后):

fixing mptt page tree
fixing mptt plugin tree
all done
Run Code Online (Sandbox Code Playgroud)

但是......这并没有解决问题,例如,如果我重复命令它再次做同样的事情,同样的警告.

警告似乎没有造成任何伤害,但我想它将与下一版本的django-mptt.任何人都可以给我任何建议吗?

谢谢

django django-mptt django-cms

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

Django-mptt模型使用Django REST框架进行序列化

我使用django-mptt存储类别层次结构,我需要以下面的格式序列化所有类别数据.

{
            "id": 1,
            "name": "FOOD"
            "children": [
                {
                    "id": 6,
                    "name": "PIZZA"
                },
                {
                    "id": 7,
                    "name": "BURGER"
                }
            ],

        },
        {
            "id": 2,
            "name": "ALCOHOL"
            "children": [
                {
                    "id": 8,
                    "name": "WINE"
                },
                {
                    "id": 9,
                    "name": "VODKA"
                }
            ],

        },
}
Run Code Online (Sandbox Code Playgroud)

我正在使用django REST框架ModelViewset和序列化程序.怎么办?

python django django-mptt django-rest-framework

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

如何将 django-mptt 重建添加到迁移中?

我已将 django-mptt 添加到现有数据库,并创建新的迁移。

迁移过程中要求提供的默认值levelleftright和这样的领域,但不将添加model.rebuild操作迁移文件。

如何手动将重建操作添加到迁移文件?

django-mptt django-migrations

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

Django MPTT:按深度过滤?

我想知道关于django-mptt的事情,因为我正在考虑将它用于工程协调项目.

我会有一个Model类(比如说'Interface'),在Tree中有一个到Model的ForeignKey(比如'Location').

我能否按照他们所指的位置深度过滤接口?深度是父母的数量.

我还不知道如何组织我的数据,这就是我要问的原因.我正在考虑使用django-mptt(与在部署时由循环创建的模型相对,每个模型对应一个树级别),但我害怕它会阻止我的某个点并迫使我审查我的整个项目.

python django django-models mptt django-mptt

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

django 导入导出不适用于 mptt

我在尝试让导入导出适用于 mptt 模型时遇到问题。这是我的代码:

模型.py

from django.db import models
from mptt.models import MPTTModel, TreeForeignKey

class MyModel(MPTTModel):
    name = models.CharField(max_length=255)
    parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')
    active = models.BooleanField(default=True,null=False,blank=False)
    sort_order = models.PositiveIntegerField(default=0,null=True,blank=True)

    class MPTTMeta:
        order_insertion_by = ['name']

    class Meta:
        ordering = ['sort_order']

    def __str__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

管理员.py

from django.contrib import admin
from mptt.admin import MPTTModelAdmin, DraggableMPTTAdmin
from .models import MyModel
from import_export import resources
from import_export.admin import ImportExportModelAdmin, ImportExportMixin

class MyModelResource(resources.ModelResource):

    class Meta:
        model = MyModel
        exclude = ('lft','rght','tree_id','level')

@admin.register(MyModel)
class …
Run Code Online (Sandbox Code Playgroud)

python django django-admin django-mptt django-import-export

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