Django立即保存并返回对象(使用自定义pk)

2024-06-16 11:06:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用自定义创建方法create_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_entry变量中获取最近创建的对象, 也许我做错了什么,请帮忙。在

我使用一个before insertSQL触发器在数据库中将uuid生成为pk(这里是CharField),因此对象在保存之前确实有一个pk(由数据库生成)。在

演员模型

^{pr2}$

Tags: 对象模型self数据库emailcreateactorusing
2条回答

除非您手动创建了actors表,否则不会自动设置ActorID。根据您的数据库后端,None可能被视为空字符串,因此可能是有效的主键。我相信Django会采取特殊措施来更新具有相同主键的行,除非您在调用save()时指定^{}

正如@knbk指出的,只有AutoField可以设置对象的pk,因此当它不是AutoField时,检索pk的pythonic逻辑就不会执行,因此django不知道它。在

在搜索了django文档之后,我找到了uuid的AutoField的替代品,UUIDField最适合我的用例。在

actorid = models.UUIDField(db_column='ActorID', primary_key=True, editable=False, default=uuid.uuid4)

所以现在django确实知道pk,因此对象在保存后被检索。在

谢谢大家的帮助。在

相关问题 更多 >