Python Django立即保存并返回对象(使用自定义主键)
我正在使用自定义创建方法Python Django立即保存并返回对象(使用自定义主键),python,django,database,django-models,django-queryset,Python,Django,Database,Django Models,Django Queryset,我正在使用自定义创建方法create\u actor创建模型对象,如下所示: class ActorsManager(models.QuerySet): def create_actor(self, email, actortype, locationid, primaryphone, actoruniversalid): actor = self.model(email=email, actorty
create\u actor
创建模型对象,如下所示:
class ActorsManager(models.QuerySet):
def create_actor(self, email,
actortype,
locationid,
primaryphone, actoruniversalid):
actor = self.model(email=email,
actortype=actortype,
locationid = locationid,
primaryphone=primaryphone, actoruniversalid= actoruniversalid)
actor.save(using='gpr')
return actor
actor_entry = Actors.objects.using('gpr').create_actor(email='', actortype=1, locationid = location_entry,primaryphone='', actoruniversalid= new_bluenumber)
我没有在actor\u条目
变量中获取最近创建的对象,
可能是我做错了什么,请帮忙
我使用before insert SQL触发器在数据库中生成uuid作为pk(这里是CharField),因此对象在保存之前确实有一个pk(由数据库生成)
演员模型
class Actors(models.Model):
actorid = models.CharField(db_column='ActorID', primary_key=True, max_length=255) # Field name made lowercase.
actoruniversalid = models.CharField(db_column='ActorBluenumber', unique=True, blank=True, null=True, max_length=254)
......
......
objects = ActorsManager.as_manager()
class Meta:
managed = False
db_table = 'actors'
除非手动创建
actors
表,否则不会自动设置ActorID
。根据您的数据库后端,None
可能被视为与空字符串相同,因此可能是有效的主键。我相信Django会采取特殊措施来更新具有相同主键的行,除非在调用save()时指定
正如@knbk所指出的,只有AutoField可以将pk设置为对象,因此当pk不是AutoField时,检索pk的pythonic逻辑不会执行,因此django不知道它
在搜索django文档之后,我找到了UUID的AutoField的替代品,它最适合我的用例
actorid = models.UUIDField(db_column='ActorID', primary_key=True, editable=False, default=uuid.uuid4)
因此,现在django确实知道pk,因此对象在保存后被检索
谢谢大家的帮助。您得到了什么?是空对象还是其他对象?它是Actors对象的一个实例,但具有我给定的字段,即email=''、actortype=1、actorid(这里的pk)=''。但不是在保存后返回的,因为它应该给出pk。你能显示你的模型吗?@knbk model在问题中添加。所以你的db记录有一个pk。这不会改变您没有使用
自动字段的事实,因此,检索pk的python逻辑不会执行。最好从参与者id中删除primary\u key=True
,然后迁移,以便pk是自动递增整数,并在save@joelgoldstick我通过数据库中定义的before insert SQL触发器将pk生成为uuid。因此,对象将以uuid保存为pk,而不是None@KapilSachdev:是的,但Django不知道。@RemcoGerlich,你是对的,我不知道这个事实,直到knbk在评论中指出。