django form表单类,在进行更新操作时,直接通过save进行更新,没有成功,有一种原因是主外键的关系。
下面这个例子就无法save成功
...
recvform = DataRecieverForm(request.POST, instance = reciever)
if reciever.outputType == "rabbitmq":
mqobj = RabbitMQ.objects.get(pk=reciever.pk)
form = RabbitMQForm(request.POST, instance = mqobj)
else:
mqobj = Kafka.objects.get(pk=reciever.pk)
form = KafkaForm(request.POST, instance = mqobj)
if recvform.is_valid() and form.is_valid():
if reciever:
recvform.save()
form.save()
...
这里recvform和form之间是有主外键关系的,recvform中的id主键,是form中id是外键,关联recvform的id主键。
所以在更新的时候form需要先save,recvform后save。
处理:
调换recvform和form的位置就可以了,即:
...
recvform = DataRecieverForm(request.POST, instance = reciever)
if reciever.outputType == "rabbitmq":
mqobj = RabbitMQ.objects.get(pk=reciever.pk)
form = RabbitMQForm(request.POST, instance = mqobj)
else:
mqobj = Kafka.objects.get(pk=reciever.pk)
form = KafkaForm(request.POST, instance = mqobj)
if recvform.is_valid() and form.is_valid():
if reciever:
#调整save顺序
form.save()
recvform.save()
...