我正在尝试为Django项目创建数据库表。通过ArztFachbereich,Arzt和Fachbereich之间存在多对多关系。

class Fachbereich(models.Model):
    id = models.IntegerField(db_column='FachID', primary_key=True)
    name = models.CharField(db_column='Name', unique=True, max_length=100)

class Arzt(models.Model):
    name = models.CharField(max_length=500)
    fachbereich = models.ManyToManyField(Fachbereich, through=ArztFachbereich)

class ArztFachbereich(FachbereichUndArztFachbereiche):
    arzt = models.ForeignKey(Arzt)
    fachbereich = models.ForeignKey(Fachbereich)


执行syncdb后,我得到NameError:未定义名称'ArztFachbereich'

当我更改Arzt和ArztFachbeeich的位置时,与Arzt会得到相同的NameError。
有没有办法做到这一点?还是应该在MySQL中手动进行此操作?

最佳答案

您需要在传递给through参数的模型周围加上引号。

更改为:

fachbereich = models.ManyToManyField(Fachbereich, through='ArztFachbereich')


docs here中的示例。

编辑:

正如Andrew在评论中指出的那样,将模型放在引号中会使评估​​变得懒惰,因此ORM将首先解析所有类,然后再返回它。

10-07 19:08
查看更多