我正在使用GEOS API中的"缓冲"方法根据GeoDjango中的点和半径创建一个圆,根据这个答案:GeoDjango:如何根据点和半径创建一个圆
正如一位评论者指出的那样,你必须将半径以km为单位转换为......但是如何?我想这是一个快速的公式,但它对我来说是希腊语.我会感激任何指针.
我正在尝试制作使用 django-mptt 管理的 FeinCMS 页面树的副本。我写了这个函数:
def make_tree_copy(page, parent=None):
'''
Makes a copy of the tree starting at "page", reparenting it to "parent"
'''
new_page = Page.objects.create_copy(page)
new_page.save()
Page.tree.move_node(new_page, parent)
# re-read so django-mptt fields get updated
new_page = Page.objects.get(id=new_page.id)
for child in page.get_children():
# re-read so django-mptt fields get updated
child = Page.objects.get(id=child.id)
make_tree_copy(child, new_page)
Run Code Online (Sandbox Code Playgroud)
并调用它使用
make_tree_copy(Page.tree.root_nodes()[0])
Run Code Online (Sandbox Code Playgroud)
它一般有效,但是当我有一个看起来像这样的页面树时:
A
|- B
|- C
|- D
Run Code Online (Sandbox Code Playgroud)
它出来是这样的:
A
|- B
|- D
|- C
Run Code Online (Sandbox Code Playgroud)
从我逐步完成 mptt 代码来看,神奇似乎发生在 mptt/managers.py/_inter_tree_move_and_close_gap() 中,由于某种原因,孙子的“lft”值发生了变化。在移动之前它们是 C=3,D=5,之后它们是 C=5,D=3。 …