django - 使用 postgreSQL 在 Django 中设置外键关系
问题描述
我想使用 PostgreSQL 在 Django 中建模以下实体关系:
--------- ------------------ ---------------
|objective|----1:Many---- |userToObjective| ----Many:1----|acounts_account|
--------- ------------------ ---------------
目标和帐户是 2 个不同的 Django 应用程序,我正在使用此代码创建我的表数据结构:
# models.py Objective
from django.contrib.auth import get_user_model
# Import the user model from the Accounts application
User = get_user_model()
class Objective(models.Model):
id = models.AutoField(primary_key=True)
objective = models.CharField(null=False, max_length=60)
initial_date = models.DateField(default=timezone.now(), null=False)
expiration_date = models.DateField()
users = models.ManyToManyField(User, through='UserToObjective', through_fields=('user','objective'), related_name='objectives')
class UserToObjective(models.Model):
id = models.AutoField(primary_key=True)
user = models.ForeignKey(User, db_column='id', on_delete = models.PROTECT)
objective = models.ForeignKey(Objective, db_column='id', on_delete = models.PROTECT)
-----------------------------------------------------------------------------------
# models.py Accounts
class Account(AbstractBaseUser):
id = models.AutoField(primary_key=True)
email = models.EmailField(verbose_name="email", max_length=60, unique=True)
username = models.CharField(max_length=30, unique=True)
last_login = models.DateTimeField(verbose_name='last login', auto_now=True)
date_joined = models.DateTimeField(verbose_name='date joined', auto_now_add=True)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
objects = MyAccountManager()
def __str__(self):
return self.email
def has_perm(self, perm, obj=None):
return self.is_admin
def has_module_perms(self, app_label):
return True
-----------------------------------------------------------------------------------
但是,当我应用迁移时python manage.py makemigrations
遇到以下错误:
objective.Objective.users: (fields.E339) 'UserToObjective.objective' is not a foreign key to 'Account'.
HINT: Did you mean one of the following foreign keys to 'Account': user?
objective.Objective.users: (fields.E339) 'UserToObjective.user' is not a foreign key to 'Objective'.
HINT: Did you mean one of the following foreign keys to 'Objective': objective?
objective.UserToObjective: (models.E007) Field 'objective' has column name 'id' that is used by another field.
HINT: Specify a 'db_column' for the field.
objective.UserToObjective: (models.E007) Field 'user' has column name 'id' that is used by another field.
HINT: Specify a 'db_column' for the field.
我缺少什么设置?非常感谢任何建议或帮助:)
解决方案
推荐阅读
- angular - 升级到 Angular 6 后构建失败
- c++ - 如何编译具有 cpu sse 支持的 tensorflow 静态库?
- c++ - “架构 x86_64 的未定义符号:”C++
- c - C 错误:THROTTLE_MAP_Handle 指针之前的预期表达式
- c++ - flatbuffers 模式字段中标记的“哈希”的用法是什么?
- javascript - 如何在 Selenium Webdriver Chromedriver 中禁用图像
- sql - 如何将 CTE 输出插入 Oracle 中的临时表?
- mysql - 如何从主表更新子表字段
- ms-access - 仅在不为空时添加
- jakarta-ee - 从 GlassFish 3 迁移到 Payara 4 - 面临 CDI 启用问题