如何用django为我的案例设计模型?

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。