Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.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&;定制遗留数据库_Python_Django_Legacy Database - Fatal编程技术网

Python Django&;定制遗留数据库

Python Django&;定制遗留数据库,python,django,legacy-database,Python,Django,Legacy Database,我目前正在从事一个项目,以实现一个Django接口到现有的日历应用程序。日历应用程序将MySQL作为后端数据库 在我们的自定义应用程序中,我们希望修改/扩展现有日历应用程序使用的其中一个表中的数据,例如 # Auto-generated by inspectdb - table used by calendar application class CalendarEvent(models.Model:) name = models.CharField(max_length=8

我目前正在从事一个项目,以实现一个Django接口到现有的日历应用程序。日历应用程序将MySQL作为后端数据库

在我们的自定义应用程序中,我们希望修改/扩展现有日历应用程序使用的其中一个表中的数据,例如

# Auto-generated by inspectdb - table used by calendar application
class CalendarEvent(models.Model:)
    name       = models.CharField(max_length=80)
    start_time = models.DateTimeField()
    end_time   = models.DateTimeField()


# Manually created table
class CustomCalendarEvent(models.Model:)
    code       = models.CharField(max_length=80) # Mapped from name
    length     = models.DateTimeField()          # start_time - stop_time
    .... additional data ....
我们还希望数据表示与现有日历表保持同步,即当在日历应用程序中创建新条目时,这些条目将自动传播到我们的自定义表

我可以想出几种明显的方法来实现这一点(例如,由cron或MySQL触发器启动的同步脚本),但我并不觉得这些解决方案特别优雅

一种可能是对CustomCalendarEvent使用,并覆盖get_query_set功能以触发同步功能


这是Django CustomManager的合法使用吗?如果没有,是否有人可以推荐解决此问题的替代方法?

似乎您正在尝试使用更多字段扩展CalendarEvent

首先,我将对CustomCalendarEvent进行以下更改:

code=models.CharField(最大长度=80)#从名称映射

calendar\u event=models.ForeignKey(CalendarEvent)

如果length只是计算开始时间和结束时间之间的天数差,我会将其从CustomCalendarEvent中删除,改为在CalendarEvent中调用(只是一个进行计算的方法)

您确实不希望在两个表之间复制数据—这是在CalendarEvent中使用
name
和在CustomCalendarEvent中使用
code
时得到的结果。对name的更新必须同步到
code
,如果您只想用更多字段扩展CalendarEvent表,则没有理由这样做

然后让CalendarEvent传播插入/删除更改。我相信,更新在您的情况下并不重要,因为CustomCalendarEvent只是CalendarEvent的一个扩展

替代方法:在CalendarEvent上使用数据库插入触发器,将条目传播到CustomCalendarEvent。我仍然希望CustomCalendarEvent表在CalendarEvent中有一个外键,而不是复制数据



编辑:顺便说一句,我永远不会像你建议的那样使用a来修改数据,即使是作为某些读取操作的副作用。管理器是关于查询的,而不是关于修改数据。

似乎您正在尝试使用更多字段扩展CalendarEvent

首先,我将对CustomCalendarEvent进行以下更改:

code=models.CharField(最大长度=80)#从名称映射

calendar\u event=models.ForeignKey(CalendarEvent)

如果length只是计算开始时间和结束时间之间的天数差,我会将其从CustomCalendarEvent中删除,改为在CalendarEvent中调用(只是一个进行计算的方法)

您确实不希望在两个表之间复制数据—这是在CalendarEvent中使用
name
和在CustomCalendarEvent中使用
code
时得到的结果。对name的更新必须同步到
code
,如果您只想用更多字段扩展CalendarEvent表,则没有理由这样做

然后让CalendarEvent传播插入/删除更改。我相信,更新在您的情况下并不重要,因为CustomCalendarEvent只是CalendarEvent的一个扩展

替代方法:在CalendarEvent上使用数据库插入触发器,将条目传播到CustomCalendarEvent。我仍然希望CustomCalendarEvent表在CalendarEvent中有一个外键,而不是复制数据



编辑:顺便说一句,我永远不会像你建议的那样使用a来修改数据,即使是作为某些读取操作的副作用。管理器是关于查询的,而不是关于修改数据的。

为什么不使用模型继承
CustomCalendarEvent
可以继承自
CalendarEvent
并以这种方式添加新字段。

为什么不使用模型继承
CustomCalendarEvent
可以继承自
CalendarEvent
并以这种方式添加新字段。

感谢您的回复。我开始觉得我在滥用客户经理的职责。谢谢你的回复。我开始觉得我在滥用客户经理的职责。这也是一个非常好的主意。看,是的。。。这是个好主意。我知道Django支持抽象超类的继承,但没有意识到我可以扩展现有的类——在这种情况下,我不允许修改这些类。这也是一个非常好的主意。看,是的。。。这是个好主意。我知道Django支持抽象超类的继承,但没有意识到我可以扩展现有的类——在这种情况下,我不允许修改这些类。