django-mptt在具有相同代码和数据的两台机器上的不同数据排序

时间:2019-04-03 22:09:16

标签: django postgresql django-mptt

我正在使用django-mptt库创建这样的目录层次结构:

directory_a
   directory_some_name
       directory_a
       directory_b
   directory_some_name
directory_b
   directory_some_name
   directory_some_name

models.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源进行了一些研究并调试了我的应用程序之后,我发现django mptt中的此查询集包含本地计算机和服务器之间的不同数据,它们具有相同的db数据和代码filters和{{ 1}}:

order_by

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

本地计算机:OS X Mojave。 DB:带有postgis 2.5.2,python3.7.3,django 2.1.7,django-mptt 0.9.1的postgresql 9.6.10

服务器:Ubuntu,带有PostgreSQL 2.5.1 python3.7.1,django 2.1.7,django-mptt 0.9.1的Postgresql 9.6.10

1 个答案:

答案 0 :(得分:0)

找出解决方案。问题出在OS X上的俄语单词在PostgreSQL排序中。请按照article(俄语)中的以下步骤进行操作。