如何使用 django 为我的案例设计模型?
Posted
技术标签:
【中文标题】如何使用 django 为我的案例设计模型?【英文标题】:how to design model for my case with django? 【发布时间】:2010-12-03 05:05:55 【问题描述】:这里有两个角色:培训师和实习生。培训师可能有多个学员。虽然每个学员可能只有一名教练,也可能没有教练。
这是我的模型:
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 错误:一个或多个模型未验证: registration.trainer:字段“user”的访问器与相关的 m2m 字段“User.trainer_set”发生冲突。将related_name 参数添加到“用户”的定义中。 registration.trainer:m2m 字段“受训者”的访问器与相关字段“User.trainer_set”发生冲突。为 'trainee' 的定义添加一个 related_name 参数。
有人有解决这个问题的想法吗?有没有更好的方法来模拟这种关系?
【问题讨论】:
【参考方案1】:问题是外键建立了双向关系。这意味着您可以执行 User.trainer_set 以获取 User 下的所有 Trainer 模型,这意味着您可以循环引用回用户数据库(获取 Trainer 模型会获取其所有字段,其中一个字段是原始 User型号。
因此,要解决此问题,请在外键中添加一个相关的名称参数以停止这种循环依赖:
user = models.ForeignKey(User, unique=True, related_name='traineruser')
您可以将 traineruser 替换为数据库中还没有表的东西。
【讨论】:
非常感谢。这是我第一次在这里提出问题。再次感谢!以上是关于如何使用 django 为我的案例设计模型?的主要内容,如果未能解决你的问题,请参考以下文章