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

Как я могу это сделать с моей текущей установкой?

Я не могу понять, что выпадающий список стран/местоположений офиса заполняется из пакета, а не из моей собственной модели страны, и я хочу избежать создания собственной модели страны, поскольку, как я предполагаю, мне придется заполнять записи о странах самостоятельно. Заранее спасибо

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