我正在使用自定义创建方法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
变量中获取最近创建的对象,
可能是我做错了什么,请帮忙。
我在插入 SQL触发器之前使用在数据库中生成uuid为pk(此处为CharField),因此该对象在保存之前确实有一个pk(由数据库生成)。 / p>
演员模特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'
答案 0 :(得分:0)
除非您手动创建actors
表,否则ActorID
不会自动设置。根据您的数据库后端,None
可能与空字符串相同,因此可能是有效的主键。我相信Django会采取特殊措施来更新行,如果存在具有相同主键的行,除非您在调用save()
时指定forceinsert=True
答案 1 :(得分:0)
正如@knbk指出的那样,只有一个AutoField可以将pk设置为一个对象,因此当它不是一个AutoField而且django不知道时,不会执行检测pk的 pythonic 逻辑关于它。
在搜索django文档后,我找到了一个替代AutoField for UUIDs的UUIDField,它最适合我的用例。
actorid = models.UUIDField(db_column='ActorID', primary_key=True, editable=False, default=uuid.uuid4)
所以现在django确实知道了pk,因此在保存后会检索对象。
谢谢大家的帮助。