Django smart selects chain 2 models with country list that is not its own model
У меня есть 3 модели CompanyRole, Office и расширенная модель пользователя - и я успешно внедрил пакет django smart selects и создал ChainedForeignKey select из Office в CompanyRole.
Модель CompanyRole имеет записи сотрудник и фрилансер, а модель Office имеет название офиса и поле companyrole только для сотрудника - это работает как ожидалось, поскольку в выпадающем списке для companyrole пользователь выбирает сотрудника, тогда в выпадающем списке для offcies будет заполнено, но если фрилансер выбран из выпадающего списка роли компании, тогда ничего не будет заполнено в выпадающем списке офиса.
Однако, у меня также есть поле в модели пользователя под названием location и поле country в модели офиса, которое заполняет список стран из пакета django_countries, поэтому мне не пришлось создавать модель для стран.
Пожалуйста, посмотрите мой файл models.py ниже:
models.py
from django.db import models
from django.utils.translation import gettext_lazy as _
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
from django_countries.fields import CountryField
from smart_selects.db_fields import ChainedForeignKey
class CompanyRole(models.Model):
name = models.CharField(max_length=30)
def __str__(self):
return self.name
class Office(models.Model):
company_role = models.ForeignKey(CompanyRole, on_delete=models.CASCADE)
country = CountryField(null=True)
name = models.CharField(max_length=30)
def __str__(self):
return self.name
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), unique=True)
username = models.CharField(max_length=150, unique=True)
first_name = models.CharField(max_length=150)
last_name = models.CharField(max_length=150)
start_date = models.DateTimeField(default=timezone.now)
comments = models.TextField(_(
'comments'), max_length=500, blank=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
is_email_verified = models.BooleanField(default=False)
is_premium = models.BooleanField(default=False)
company_role = models.ForeignKey(CompanyRole, on_delete=models.SET_NULL, null=True, blank=True)
location = CountryField(null=True)
office = ChainedForeignKey(
Office,
on_delete=models.SET_NULL,
null=True,
blank=True,
chained_field="company_role",
chained_model_field="company_role",
show_all=False,
auto_choose=True,
sort=True)
objects = CustomAccountManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username', 'first_name', 'last_name']
def __str__(self):
return self.username
Теперь я хотел бы иметь еще одно правило ChainedForeignKey для модели Office, чтобы не только заполнять, если роль компании является сотрудником, но и по выбору местоположения со страной офиса.
Как я могу это сделать с моей текущей установкой?
Я не могу понять, что выпадающий список стран/местоположений офиса заполняется из пакета, а не из моей собственной модели страны, и я хочу избежать создания собственной модели страны, поскольку, как я предполагаю, мне придется заполнять записи о странах самостоятельно. Заранее спасибо