Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在包含数据的数据库上激活/使用django mptt?_Python_Django_Django 1.7_Django Mptt - Fatal编程技术网

Python 如何在包含数据的数据库上激活/使用django mptt?

Python 如何在包含数据的数据库上激活/使用django mptt?,python,django,django-1.7,django-mptt,Python,Django,Django 1.7,Django Mptt,我有一个带有offices表的现有数据库。它具有以下字段: id lvl parent_id name code 我有一个Django(1.7)模型,看起来像: class Office(models.Model): id = models.IntegerField( primary_key=True ) lvl = models.IntegerField( blank=True, null=False ) parent =

我有一个带有
offices
表的现有数据库。它具有以下字段:

id
lvl
parent_id
name
code
我有一个Django(1.7)模型,看起来像:

class Office(models.Model):
    id          = models.IntegerField( primary_key=True )
    lvl         = models.IntegerField( blank=True, null=False )
    parent      = models.ForeignKey( 'self', null=True)
    name        = models.TextField( blank=True)
    code        = models.TextField( blank=True)

    class Meta:
        managed  = False
        db_table = 'offices'

    def __str__(self):
        return "(" + self.code + ") " + self.name + ", level " + str(self.lvl)
在其当前形式中,调用
someoffice.parent
可以正常工作并返回父级。但是,我需要能够调用
someoffice.children()
,并获取单个父节点的子节点

这似乎是一个很好的用例。但是,我不知道如何在现有模型和数据库表上使用
django-mptt
,而不让django抛出丢失迁移的错误。我非常乐意放弃这个模型和/或用其他东西代替它。我不想做的是扔掉现有的表,除非我可以轻松地做一次,而不必再与之斗争

如何使用现有的数据库表来实现
django mptt



Edit:在
django-mptt
中,我还想使用其他一些方便的函数,因此我想了解如何使用现有表实现
django-mptt
,在原地修改表,以便无需迁移即可使用
django-mptt
,或者创建一个新表,然后将数据加载到其中。理想情况下,我可以更改现有表,然后使用
django-mpt
,而无需运行django迁移。

如果您只想为父级获取子级,则无需使用mpt。该功能内置于Django中:给定一个名为
my\u Office
的Office实例,您可以使用
my\u Office.Office\u set.all()
获取其子项

您可能希望为反向访问器指定一个更好的名称,这可以通过修改字段定义来实现:

parent      = models.ForeignKey('self', null=True, related_name='children')

现在你可以做我的办公室.children.all()

好的,谢谢你提供的信息。我的问题不全面,所以我会编辑它。在
django mptt
中还有其他一些方便的函数,我可能想在模板中使用,等等,所以我正在寻找一种方法,用我拥有的表和/或关于是否应该创建一个新表并将数据迁移到其中的建议来实现它。