如何使用 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 为我的案例设计模型?的主要内容,如果未能解决你的问题,请参考以下文章

Django用户模型电子邮件字段:如何使其成为强制性

对如何使 Django 模型字段可选的感到困惑

如何做类似 Django 模型的元类技巧

ModuleNotFoundError:没有名为 Foo 的模块 - 如何将模型导入 Django 应用程序的脚本?

如何使 Django 的开发服务器公开?一般可以吗?

如何实现 Django 不区分大小写的模型字段?