我的一个模型中有 Django 自定义字段“BigAutoField”。这不是主键。我使用 uuid 作为我的主键。插入时,一切正常。我在 mysql 数据库中获得了一个新条目,该条目具有自动递增的值。但问题是保存模型实例后无法获取该字段的值。(点符号不起作用)。我必须再次获取对象实例才能访问其值。谁能帮助我如何在不重新加载的情况下访问该值?
class BigAutoField(models.PositiveIntegerField):
__metaclass__ = models.SubfieldBase
def __init__(self, *args, **kwargs):
self.sequence_name = kwargs.pop('sequence_name', None)
kwargs['blank'] = True
kwargs['editable'] = False
kwargs['null'] = False
kwargs['unique'] = True
super(BigAutoField, self).__init__(*args, **kwargs)
def db_type(self, connection):
engine = settings.DATABASE_ENGINE
if engine[-5:] == 'mysql':
return 'bigint AUTO_INCREMENT'
elif engine == 'oracle':
return 'NUMBER(19)'
elif engine[:8] == 'postgres':
return 'bigserial'
else:
raise NotImplemented()
def get_internal_type(self):
return 'BigAutoField'
def to_python(self, value):
if value is None:
return value
try:
return long(value)
except (TypeError, ValueError):
raise exceptions.ValidationError(
_("This value must be a long integer."))
def get_db_prep_value(self, value, connection=None, prepared=False):
if value is None:
return value
return long(value)
这是我的自定义 bigautofield 类。我第一次使用此字段对模型执行保存时效果很好。例如。
x= XYZ.objects.create(a='a',b='b')
x.save()
但现在我无法访问 xc,其中 c 是 XYZ 中的 BigAutoField。尽管在 mysql 数据库中,相同的自动增量值是可见的。