微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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
)即可。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。