Python 如何在Django中使用自定义自动递增字段实例化对象?
我正在开发一个应用程序,它需要从一个旧数据库导入一些数据,比如说IDs 1到100万。旧数据库中的ID将加载到唯一的整数列中,但不再是主键。在加载旧数据(以及之后)时,应为新系统中创建的条目分配一个从300万开始的序列ID,以便在一段时间内肯定有空间导入所有旧条目,而不会发生冲突 这目前是通过迁移doingPython 如何在Django中使用自定义自动递增字段实例化对象?,python,django,django-models,Python,Django,Django Models,我正在开发一个应用程序,它需要从一个旧数据库导入一些数据,比如说IDs 1到100万。旧数据库中的ID将加载到唯一的整数列中,但不再是主键。在加载旧数据(以及之后)时,应为新系统中创建的条目分配一个从300万开始的序列ID,以便在一段时间内肯定有空间导入所有旧条目,而不会发生冲突 这目前是通过迁移doingALTER SEQUENCE[…]START 3000000和自定义字段类型实现的: import typing from django.db import models, Connectio
ALTER SEQUENCE[…]START 3000000
和自定义字段类型实现的:
import typing
from django.db import models, ConnectionHandler
from psycopg2.extensions import AsIs
class SerialField(models.IntegerField):
def db_type(self, connection: ConnectionHandler) -> str:
return 'serial'
def get_db_prep_save(self, value: typing.Optional[int], connection: ConnectionHandler) -> typing.Union[int, AsIs]:
if isinstance(value, int):
# so we can override the default with our own value
return value
return AsIs('default')
当前解决方案的问题是,当创建具有
SerialField
的对象时,字段的值是None
,而不是保存在数据库中的实际值。我是否可以更改SerialField
,这样我就不必手动同步返回的对象来获取序列值,或者是否有其他方法来实现这一点?我可能错了,但我认为序列值是由DBMS递增的,所以,在代码中创建对象实际上不会做到这一点,除非您尝试持久化所述对象,在这种情况下,它的值是获得的。缺少2个DB调用(persist,fetch ID),我想不出一个好方法来实现这一点