Python Django字段错误无法解析关键字';是教职员吗

Python Django字段错误无法解析关键字';是教职员吗,python,django,django-models,Python,Django,Django Models,当我将trainer作为外键添加到订阅模型中,然后从管理面板访问订阅模型的任何记录时,会出现上述错误 Cannot resolve keyword 'is_staff' into field. Choices are: dob, experience, id,user, user_id 您以错误的方式引用嵌套关系 class Subscription(models.Model): client = models.OneToOneField(ClientProfile, on_delet

当我将trainer作为外键添加到订阅模型中,然后从管理面板访问订阅模型的任何记录时,会出现上述错误

Cannot resolve keyword 'is_staff' into field. Choices are: dob, experience, id,user, user_id

您以错误的方式引用嵌套关系

class Subscription(models.Model):
    client = models.OneToOneField(ClientProfile, on_delete=models.CASCADE)
    trainer = models.ForeignKey(TrainerProfile, null=True, blank=True,
        on_delete=models.SET_NULL, limit_choices_to={'is_staff': True})
    plan = models.ForeignKey(Plan, on_delete=models.CASCADE)
    transaction = models.OneToOneField(PaymentHistory, on_delete=models.CASCADE)
    start_date = models.DateTimeField()
    end_date = models.DateTimeField()

class TrainerProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    dob = models.DateField(null=True)
    experience = models.PositiveIntegerField(default=0)
类订阅(models.Model):
#其他领域
trainer=型号。ForeignKey(TrainerProfile,null=True,blank=True,
on_delete=models.SET_NULL,
将选择限制为={'user\uu'is\u staff':True})

也就是说,它应该是
user\u is\u staff
而不是
is\u staff
您试图访问的属性
is\u staff
,该属性在
TrainerProfile
模型中不存在
is_staff
User
的一个属性,您可以在
TrainerProfile
模型的
User
字段中引用该属性

要访问此属性,您需要“遍历”来自
Subscription
->
TrainerProfile
->
User
的关系。Django允许您通过使用双下划线表示法来实现这一点,例如:
某些\u fk\u字段\u fk\u字段属性

在您的示例中,您需要将
trainer
上的
limit\u choices\u更改为
选项,以遍历与用户的关系,如下所示:

class Subscription(models.Model):
    # other fields
    trainer = models.ForeignKey(TrainerProfile, null=True, blank=True,
                                on_delete=models.SET_NULL,
                                limit_choices_to={'user__is_staff': True})
类订阅(models.Model):
client=models.OneToOneField(ClientProfile,on_delete=models.CASCADE)
trainer=型号。ForeignKey(TrainerProfile,null=True,blank=True,
在_delete=models.SET _NULL时,将_choices _限制为={'user u是_staff':True})
计划=模型.ForeignKey(计划,on_delete=模型.CASCADE)
事务=模型.OneToOneField(PaymentHistory,on_delete=模型.CASCADE)
开始日期=models.DateTimeField()
end_date=models.DateTimeField()
班级培训人员档案(models.Model):
user=models.OneToOneField(用户,on_delete=models.CASCADE)
dob=models.DateField(null=True)
experience=models.PositiveIntegerField(默认值=0)

添加您的
列车员档案
型号
class Subscription(models.Model):
    client = models.OneToOneField(ClientProfile, on_delete=models.CASCADE)
    trainer = models.ForeignKey(TrainerProfile, null=True, blank=True,
        on_delete=models.SET_NULL, limit_choices_to={'user__is_staff': True})
    plan = models.ForeignKey(Plan, on_delete=models.CASCADE)
    transaction = models.OneToOneField(PaymentHistory, on_delete=models.CASCADE)
    start_date = models.DateTimeField()
    end_date = models.DateTimeField()

class TrainerProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    dob = models.DateField(null=True)
    experience = models.PositiveIntegerField(default=0)