Внешний ключ на заказной модели Users Django - PullRequest
0 голосов
/ 22 января 2020

У меня есть следующие 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

1 Ответ

0 голосов
/ 22 января 2020

изменить пользователя импорта на:

from django.conf import settings 
User = settings.AUTH_USER_MODEL
...