У меня есть следующие 2 модели User
(индивидуальные) и Activity
. Пользователь может быть подключен только к 1 действию, но на него можно ссылаться из нескольких записей User
, поэтому у меня есть отношение «многие к одному», и я создал это отношение следующим образом:
Task app
models.py
from django.utils import timezone
from django.contrib.auth import get_user_model
User = get_user_model()
class Task(models.Model):
id = models.AutoField(primary_key=True)
responsible = models.ForeignKey(User, on_delete=models.CASCADE)
task = models.CharField(null=False, max_length=140)
initial_date= models.DateField(default=timezone.now(), null=False)
ending_date = models.DateField(default=timezone.now(), null=False)
Accounts app
models.py
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
class MyAccountManager(BaseUserManager):
def create_user(self, email, username, password=None):
if not email:
raise ValueError("User must have an email address.")
if not username:
raise ValueError("User must have a username.")
user = self.model(email=self.normalize_email(email),username=username,)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, username, password):
user = self.create_user(email=self.normalize_email(email),username=username,password=password,)
user.is_admin = True
user.is_staff = True
user.is_superuser = True
user.save(using=self._db)
return user
class Account(AbstractBaseUser):
email = models.EmailField(verbose_name="email", max_length=60, unique=True)
username = models.CharField(max_length=30, unique=True)
# The following fields are required for every custom User model
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
Я выполнил миграцию, но связь с FK не удалась, и даже когда я пытаюсь выполнить простой набор запросов для модели Activity
, такой как q = Activity.objects.all()
, я получаю ProgrammingError: column activity_activity.responsible_id doesn't exist
. Какой шаг мне не хватает в этих отношениях внешнего ключа с моей настроенной Users
моделью? Будем весьма благодарны за любую помощь, комментарии или изменения:)
Мой желаемый результат с отношениями FK
id | responsible | task | initial_date | ending_date
-------------------------------------------------------------
4 | roger_785 | Refactor code | 2020-01-16 | None
5 | mauro_12 | Fix the network | 2020-01-10 | None