Я хочу смоделировать следующие отношения сущностей в Django, используя PostgreSQL:
--------- ------------------ ---------------
|objective|----1:Many---- |userToObjective| ----Many:1----|acounts_account|
--------- ------------------ ---------------
Objective и Accounts - это 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.
Какие настройки мне не хватает? Любой совет или помощь с благодарностью:)