how to design model for my case with django?
这里有两个角色:培训师和受训者。培训师可能有多个学员。而每个受训者可能只有一名培训师或没有培训师。
这是我的模型:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class TrainerShip(models.Model): trainer = models.ForeignKey('Trainer') trainee = models.ForeignKey(User) request_date = models.DateTimeField(auto_now_add=True) accept_date = models.DateTimeField(auto_now_add=True) expiration_date = models.DateTimeField(auto_now_add=True) class Trainer(models.Model): user = models.ForeignKey(User, unique=True) trainee = models.ManyToManyField(User, through=TrainerShip) introduction = models.TextField(max_length=500) certification = models.TextField(max_length=300) specialties = models.TextField(max_length=300) contact = models.TextField(max_length=100) active = models.BooleanField(default=False) |
尝试创建数据库时出现以下错误:
shen@shen-laptop:~/django/sutifang$ ./manage.py syncdb
Error: One or more models did not validate:
registration.trainer: Accessor for field 'user' clashes with related m2m field 'User.trainer_set'. Add a related_name argument to the definition for 'user'.
registration.trainer: Accessor for m2m field 'trainee' clashes with related field 'User.trainer_set'. Add a related_name argument to the definition for 'trainee'.
有人想解决这个问题吗?有没有更好的方法来模拟这种关系?
问题是,外键建立了双向关系。这意味着您可以执行user.trainer_设置以获取用户下的所有培训师模型,这意味着您有一个返回用户数据库的循环引用(获取培训师模型获取其所有字段,其中一个字段是原始用户模型)。
因此,要解决此问题,请向外键添加相关的名称参数以停止此循环依赖项:
1 | user = models.ForeignKey(User, unique=True, related_name='traineruser') |
您可以用数据库中没有表的内容替换traineruser。