首先,绝对不要对这些值使用integerfield。它们是外键,您应该使用foreignkey字段。这些应该叫
user
和
client
-请注意,您仍然可以像以前一样访问基础ID。
(此外,无需明确声明
id
字段;而且您几乎不应该重写
__init__
在一个模型中,尤其是没有任何点覆盖只调用超级方法的方法。把那个拿开。)
class AccessLevel(models.Model):
user = models.ForeignKey('Users', null=False, blank=False)
client = models.ForeignKey('Client', null=False, blank=False)
class Users(models.Model):
client = models.ForeignKey('Client', null=False, blank=False)
现在,对于您的实际问题,ID是由数据库分配的,只有在保存之后才会发生。所以你应该创建你的相关项目
之后
那。
def save(self, *args, **kwargs):
super(Users, self).save(*args, **kwargs)
AccessLevel(user_id=self.id,
client_id=self.client_id).save(using='default')
print('Access Level Set for User while saving')
创建该项的另一种方法可能更清楚一些,是使用外键提供的访问器:
self.accesslevel_set.create(client_id=self.client_id)
最后,这可能比
a post-save signal
,而不是在保存方法中。