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
中还有其他一些方便的函数,我可能想在模板中使用,等等,所以我正在寻找一种方法,用我拥有的表和/或关于是否应该创建一个新表并将数据迁移到其中的建议来实现它。