0

我打算将 Django MPTT 与多租户架构一起使用,因此会有很多站点主页,并且我不希望page每次用户更改其页面位置时都必须重建整个表的 mptt 字段About Us。我宁愿只重建那个用户的网站。这可能吗?

4

2 回答 2

1

只需为每棵树使用不同的tree_id值。

于 2012-04-25T15:44:20.583 回答
-1

我试过了,我将第二棵树加载到同一张表中。一方面,Django MPTT 将新的 tree_id 赋予新的树枝。所以这样看来,它似乎奏效了。另一方面,现在节点的名称不会使用来自 Django MPTT 站点的模板显示。(我附上一个屏幕截图。)当表格中只有一棵树时,模板工作得很好。我没有更改任何代码等,我只是在表中放了第二棵树,然后就可以了!清单上没有名字。在此处输入图像描述

树的结构看起来是一样的。当我访问另一棵树时,我也没有得到名字,我可以访问它,除了没有名字。

这是模型定义:

class EbayCategory(MPTTModel):
    iCategoryID     = models.PositiveIntegerField( 'ebay category number',
                        db_index=True )
    name            = models.CharField(
                        'ebay category description', max_length = 50 )
    iLevel          = models.PositiveSmallIntegerField(
                        'ebay level (top is 1, lower levels are bigger numbers)' )
    iParentID       = models.PositiveIntegerField( 'ebay parent category' )
    bLeafCategory   = models.BooleanField( 'leaf category?' )
    iTreeVersion    = models.PositiveSmallIntegerField( 
                        'category tree version' )
    iMarket         = models.ForeignKey( Market, verbose_name = 'ebay market' )
    iSupercededBy   = models.PositiveIntegerField(
                        'superceded by this ebay category', null = True )
    parent          = TreeForeignKey( 'self',
                        null=True, blank=True, related_name='children',
                        db_index=True)

    def __str__(self):
        return self.name

    class Meta():
        verbose_name_plural = 'ebay categories'
        db_table        = 'ebay_categories'
        unique_together = ('iCategoryID', 'iMarket',)

    class MPTTMeta:
        order_insertion_by = ['name']

除了 parent 之外的所有列都来自 ebay API。

此时,我没有已被取代的类别,因此 iSupercededBy 列对于所有行都是空的。我还没有经历过 ebay 目录列表更新,所以每个市场的所有行都是相同的 ebay 树版本(当前版本)。

该视图按市场和 ebay 树版本选择(两个值都来自市场表):

def show_ebay_categories(request, sMarket):
    iMarket = Market.objects.get( cMarket = sMarket.upper() )
    context = { 'nodes':EbayCategory.objects.filter(
        iMarket = iMarket, iTreeVersion = iMarket.iCategoryVer ) }
    return render(request, 'ebaycategories/ebay_categories.html', context)

对添加第二棵树之前的数据库副本运行相同的代码,名称会显示出来。

ebay 类别——今天,在添加第二棵树之前使用数据库副本

似乎添加第二棵树以重建无法修复的方式损坏了表。我删除了第二棵树。还是没有名字。我重建了树:

如何重建我的 django-mptt 树?

还是没有名字。我截断了表格,然后重新上传了第一棵树(ebay USA 类别)。还是没有名字。我再次重建了这棵树。还是没有名字。

工作原理:在导入数据时向每个类别列表(树)添加一个根节点。(从ebay下载的数据不包括根节点,)

具有根节点的 ebay 类别

请注意列表顶部的“EBAY-US 版本 117 Root”。

我在将第二棵树导入同一个表之后生成了列表。所以是的,它可以工作。

于 2018-01-02T00:06:30.607 回答