我想为我的用户创建唯一的人员代码。我应该在这段代码中考虑这种模式:
USER_TYPE
到user_type_code
19
为2019年:year_code
count_code
我编写了整个生成,但由于此错误而无法正常工作:
AttributeError: Manager isn't accessible via Profile instances
这是我的个人资料模型和生成器:
class Profile(models.Model):
USER_TYPE = (
(1, 'student'),
(2, 'teacher'),
(3, 'co-worker'),)
user = models.OneToOneField(User, on_delete=models.CASCADE)
Personnel_code = models.PositiveIntegerField(null=True, blank=True)
created_date = models.DateField(editable=False)
user_type = models.CharField(max_length=10, default=USER_TYPE[0][0],choices=USER_TYPE)
def personnel_code_generator(self):
user_type_code = self.user_type
year_code = datetime.datetime.now().strftime("%y")
last_user = self.objects.latest('created_date')
year_user = self.objects.filter(created_at__year=datetime.datetime.now().year)
if year_user == 0:
count_code = '0001'
else:
count_code = str(int(last_user.Personnel_code) + 1)[3:]
generated_id = int(str(user_type_code) + str(year_code) + count_code)
return generated_id
def save(self, *args, **kwargs):
if not self.id or not self.created_date:
self.personnel_code = self.personnel_code_generator()
self.created_date = datetime.datetime.now()
super(Profile, self).save(*args, **kwargs)
答案 0 :(得分:1)
就像错误所述一样,您不能通过objects
对象来不访问Profile
管理器。您应该通过Profile
class 进行访问,例如:
def personnel_code_generator(self):
user_type_code = self.user_type
year_code = datetime.datetime.now().strftime("%y")
year_users = Profile.objects.filter(created_at__year=datetime.datetime.now().year)
if not year_user:
count_code = '0001'
else:
last_user = Profile.objects.latest('created_date')
count_code = str(last_user.Personnel_code + 1)[3:]
return int(str(user_type_code) + str(year_code) + count_code)