django自参照模型,将0或null值用作子表的根

问题描述

| 我有一个PHP应用程序,正在考虑用Django或Rails重写(这些年来已经做了一些维护工作,但对这样的问题并不熟悉)。理想情况下,我希望数据库架构尽可能接近我正在使用的数据库。它具有如下模型: 菜单-ID,名称 menu_headers-id,menu_id,parent_menu_header_id,排序,名称 getMenu($ id)函数中的逻辑是按id获取菜单,然后获取具有正确menu_id和parent_menu_header_id为0的menu_headers。有一个菜单函数调用,该函数基于parent_menu_header_id获取菜单。换句话说,0表示它是根menu_header(即从menu_headers中选择*,其中menu_id = $ menu_id和parent_menu_header_id = 0排序)。所有这些都被推送到内存缓存,因此性能不是问题。 我正在考虑将应用程序移至django,并正在研究这样做的难度/可能性。 我目前有:
class Menu(models.Model):
    location=models.ForeignKey(Location)
    name = models.CharField(max_length=200)

class Menu_Header(models.Model):
    menu=models.ForeignKey(Menu)
    parent=models.ForeignKey(\'self\',null=True,blank=True,related_name=\"children\")
出现了两个问题。这不是真正的外键关系。看起来不支持复合外键。也许使用像Root_Menu_Header这样的东西,它确实具有真正的fk关系。有没有更好的方法对此建模?我看过django-mptt,但是认为这应该可行。有任何想法吗? 谢谢 -编辑#2 我可能听不清您的意思,但例如,我目前有:
menu   
id    name  
1     test menu  

menu_header  
id  menu_id parent_id   name  
1   1       NULL        Wine  
2   1       1           Red  
3   1       1           White  
当我得到Menu对象时,它具有相同级别的所有3个菜单标题。因此,这显然无法正常工作。那我应该在视图级别进行操作吗?还是不应该在menu_header表中设置外键(menu_id)?很抱歉造成混乱,但是对解决这个问题会有所帮助。如果有关于是否在Rails中更好地执行此操作的建议,也将不胜感激。 谢谢     

解决方法

Django期望,如果外键不是
NULL
,它将映射到真实对象。您真的无法解决这个问题。但是,缺少
parent
NULL
)的值暗含表示没有父级,并且您会发现围绕此开发应用程序是很自然的。 我看到的唯一真正的问题是,您是否正在尝试使用现有数据库(或从中迁移数据)。在这种情况下,您只需运行SQL更新并将父级设置为
NULL
(无论它是
0
)即可。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...