代码之家  ›  专栏  ›  技术社区  ›  Max

django mptt在代码和数据相同的两台机器上执行不同的数据排序

  •  0
  • Max  · 技术社区  · 5 年前

    我使用django mptt库创建如下目录层次结构:

    directory_a
       directory_some_name
           directory_a
           directory_b
       directory_some_name
    directory_b
       directory_some_name
       directory_some_name
    

    型号.py

    class BaseDirectory(MPTTModel):
        name = models.CharField(_('Name'), max_length=120)
        parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True,
                                blank=True, related_name='children',
                                verbose_name=_('parent directory'))
    
        def __str__(self):
            return self.name
    
        def clean(self):
            # some cleaning
            super().clean()
    
        def save(self, *args, **kwargs):
            self.clean()
            super().save(*args, **kwargs)
    
        class MPTTMeta:
            order_insertion_by = ['name']
    
        class Meta:
            abstract = True
    
    
    class OtherDirectory(BaseDirectory):
        # directory model from another application
        class Meta:
            verbose_name = _('directory')
            verbose_name_plural = _('directories')
    

    我将这段代码部署到服务器上,它可以正常工作(所有项都插入到 字母顺序 ,如果我改变它然后跑 OtherDirectory.objects.rebuild() 它返回到正常的字母顺序。 字母顺序 没用。它将新元素随机放入父树中。

    我试图从我的服务器下载数据库备份并在本地还原,但如果我运行 OtherDirectory.objects.rebuild()

    django mptt 包含本地计算机和服务器之间的不同数据,具有相同的数据库数据和代码, filters order_by

    queryset = node.__class__._tree_manager.db_manager(
                    node._state.db).filter(filters).order_by(*order_by)
    

    现在我被困住了。为什么会这样?

    本地计算机:OS X Mojave。DB:postgresql 9.6.10和postgis 2.5.2、python3.7.3、django 2.1.7、django mptt 0.9.1

    0 回复  |  直到 5 年前
        1
  •  0
  •   Max    5 年前

    找出解决办法。问题是postgresql在osx上用俄语单词排序。通过以下步骤修复此问题 article