Python 同时在两个数据库中插入数据

Python 同时在两个数据库中插入数据,python,django,Python,Django,我在Django的应用程序中有两个模型 变更模型仅用于存储在模型Ip中进行的变更日志 我的模特 类更改(models.Model): author=models.ForeignKey('auth.User',null=False,on_delete=models.CASCADE,default='auth.User') ip=models.ForeignKey('ip',on_delete=models.CASCADE,默认值=“”) old_cluster=models.ForeignKey(

我在Django的应用程序中有两个模型

变更模型仅用于存储在模型Ip中进行的变更日志

我的模特

类更改(models.Model):
author=models.ForeignKey('auth.User',null=False,on_delete=models.CASCADE,default='auth.User')
ip=models.ForeignKey('ip',on_delete=models.CASCADE,默认值=“”)
old_cluster=models.ForeignKey('cluster',on_delete=models.CASCADE,默认值=“”)
old_status=models.ForeignKey('status',on_delete=models.CASCADE,默认值=“”)
新集群=models.CharField(最大长度=20)
新建状态=models.CharField(最大长度=20)
更改日期=models.DateTimeField(默认值=时区.now)
Ip类(models.Model):
author=models.ForeignKey('auth.User',null=False,on_delete=models.CASCADE,default='auth.User')
number=models.CharField(最大长度=20,唯一性=True,默认值=“”)
status=models.ForeignKey('status',on_delete=models.CASCADE,default='')
cluster=models.ForeignKey('cluster',on_delete=models.CASCADE,默认值=“”)
创建日期=models.DateTimeField(默认值=时区.now)
定义(自我):
返回自我编号
类元:
排序=('number',)
我的观点

def ip_编辑(请求,id):
ip_edit=get_object_或_404(ip,id=id)
form=EditManagementForm(request.POST,instance=ip\u edit)
change_form=ChangeLogsForm()
如果request.method==“POST”:
如果form.is_有效():
ip_edit=form.save(commit=False)
ip_edit.save()
change\u form=ChangeLogsForm(request.POST)
如果更改表单。是否有效()
ip\u change=change\u form.save(commit=False)
ip_change.author=request.user
ip_change.ip=请求编号
ip_change.save()
返回重定向(“/app/management”)
其他:
表单=编辑管理表单(实例=ip_编辑)
args={
“形式”:形式,
}
返回渲染(请求'app/ip_edit.html',args
还有我的表格

类编辑管理表单(forms.ModelForm):
类元:
型号=Ip
字段=(
“数字”,
"地位",,
“集群”,
)
小部件={
'number':TextInput(attrs={'class':'ls form text'}),
}
类ChangeLogsForm(forms.ModelForm):
类元:
模型=变化
字段=(
"知识产权",,
“旧_集群”,
"旧身份",,
“新_集群”,
"新身份",,
)
保存ip信息编辑时,不会发生错误,但也不会保存模型更改信息


您能帮助我并让我知道是否有更正确、更简单的方法来存储模型中的更改历史吗?

由于您的
Change
模型与
Ip
模型有外键关系,并且由于
Ip\u Change
在您的视图中。py显示了
Change
模型的实例,因此您应该d将
ip_change.ip=request.number
替换为
ip_change.ip=ip_edit
,因为
ip_edit
ip
模型的实例

您想在
Ip
Change
models上执行save操作吗?如果您想这样做,那么此代码有一个非常严重的问题,人们有时会忽略,这个问题与违反数据库完整性有关。请尝试想想当
form.is\u valid()
返回
True
change\u form.is\u valid()
返回
False
时的情况。如果发生这种情况,您只会将数据保存到
Ip
数据库表中,而不会将数据保存到
change
数据库表中,因为此行
Ip\u change.save()
将无法访问。如果发生这种情况,数据完整性将被破坏,我想您不希望这样-您可能希望确保两个
保存操作都执行或不执行。您应该同时验证两个表单,如
If form.is\u valid()和change\u form.is\u valid()
并将其余逻辑放入该块中

附言


既然我开始谈论违反数据库完整性的问题,您也应该看一看,了解这一点很有用。

请使用正确的python缩进块更新view.py文件。如果您试图创建某种形式的审核日志(我认为您是),那么有许多可用的包。请看这里: