Получение списка сотрудников в модели компании в 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 может быть удобно публиковать достаточную часть программы для получения ошибки, а не только фрагменты, которые вы считаете уместными в момент получения ошибки. Здесь помог бы весь файл модели с порядком.)