Получение списка сотрудников в модели компании в Django

Я установил две следующие модели:

  • Модель "Пользователь"
class User(AbstractBaseUser, PermissionsMixin):
    username = models.CharField('username', max_length=30, blank=True)
    email = models.EmailField('Adresse mail', unique=True)
    first_name = models.CharField('Prénom', max_length=30, blank=True)
    last_name = models.CharField('Nom', max_length=30, blank=True)
    date_joined = models.DateTimeField('date joined', auto_now_add=True)
    company = models.OneToOneField(Customer, on_delete=models.CASCADE, blank=True, null=True)
    is_active = models.BooleanField('active', default=True)
    is_staff = models.BooleanField('staff status',default=False)
    is_superuser = models.BooleanField(default=False)

    objects = UserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username']


    class Meta:
        verbose_name = 'user'
        verbose_name_plural = 'users'

    def get_full_name(self):
        '''
        Returns the first_name plus the last_name, with a space in between.
        '''
        full_name = '%s %s' % (self.first_name, self.last_name)
        return full_name.strip()

    def get_short_name(self):
        '''
        Returns the short name for the user.
        '''
        return self.first_name

    def email_user(self, subject, message, from_email=None, **kwargs):
        '''
        Sends an email to this User.
        '''
        send_mail(subject, message, from_email, [self.email], **kwargs)
  • Модель "Клиент"
class Customer(models.Model):
    name = models.CharField(max_length=200, blank=False)
    transporters = models.ManyToManyField(Transporter, blank=True)


    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "Company"
        verbose_name_plural = "Companies"

Я пытаюсь получить список всех сотрудников, принадлежащих одной компании. Я хочу отобразить этот список в админке django. Моя идея заключалась в том, чтобы использовать employees = models.ManyToManyField(User, blank=True). Но это не работает, потому что я получаю следующее сообщение: employees = models.ManyToManyField(User, blank=True) NameError: name 'User' is not defined.

Не могли бы вы помочь мне с этой просьбой?

Спасибо!

Я постараюсь собрать обсуждение вместе, чтобы получить ответ на этот вопрос.

Я думаю, что проблема здесь очень проста. Просто нужно помнить, что модели в Django - это, по сути, просто программы на Python.

Вы не можете ссылаться на одну модель в другой, если она еще не определена.

Рассмотрим эту действительно простую программу:

class Foo():
  def __init__(self):
    print("hello!")

Foo()

При запуске он печатает "hello!".

Теперь перепишите это как:


Foo()

class Foo():
  def __init__(self):
    print("hello!")

Взрывается с:

Traceback (most recent call last):
  File "/home/matt/stackmodel/test.py", line 1, in <module>
    Foo()
NameError: name 'Foo' is not defined

Очень похоже на эту модель. Вы не можете ссылаться на модель User в модели Customer, если сначала не определена модель User.

(Примечание: подобная путаница - хороший пример того, почему на Stack Overflow может быть удобно публиковать достаточную часть программы для получения ошибки, а не только фрагменты, которые вы считаете уместными в момент получения ошибки. Здесь помог бы весь файл модели с порядком.)

Вернуться на верх