Я хочу проверить отфильтрованное поле в выпадающем списке в django-admin

Когда поле классификации отмечено, я хочу отфильтровать только значения в соответствии с поданной классификацией, чтобы их можно было отметить в выпадающем списке.
и я установил django-clever-selects.

Обычно поля выбора писались в models.py, но django-clever-selects, похоже, обычно ставятся и используются в helpers.py, поэтому я так и сделал.

когда я проверил в поле account_classification в models.py в admin (содержимое кортежа helpers.py 'expenses'), я хочу проверить только отфильтрованное поле в поле account_category (содержимое кортежа helpers.py CATEGORY).

В виде рисунка ниже.

введите описание изображения здесь

# models.py
class AccountBook(TimeStampedModel):
    branch = models.ForeignKey(Branch, on_delete=models.CASCADE, null=False)
    account_amount = models.PositiveIntegerField(validators=[MinValueValidator(0)], null=False, verbose_name="금액") # 금액
    account_reference = models.CharField(max_length=200, null=True, verbose_name="참조내용") 
    account_manager = models.CharField(max_length=10, null=False, verbose_name="담당자")
    account_recoder = models.CharField(max_length=10, null=False, verbose_name="기록자")
    # account_classification = models.CharField(choices=EXPENSES, max_length=100, null=True, blank=True, verbose_name="분류") # 분류 - 저장시킬 필드
    # account_category = models.CharField(choices=CATEGORY, max_length=100, null=True, verbose_name="범주") # 범주 - 저장시킬 필드
# forms.py
class AccountBookForm(ChainedChoicesForm, forms.ModelForm):
    account_classification = ChoiceField(choices=[('', (u'Select a classification'))] + list(EXPENSES))
    account_category = ChainedChoiceField(parent_field='account_classification', ajax_url=reverse_lazy('ajax_chained_category'), empty_label=(u'Select category'))

    class Meta:
        model = AccountBook
        fields = ["branch", "account_classification", "account_category", "account_amount", "account_reference", "account_manager", "account_recoder"]
views.py
class SimpleChainView(FormView):
    form_class = AccountBookForm
    template_name = '/'
    success_url = '/'
    title = '/'


class AjaxChainedCategory(ChainedSelectChoicesView):
    def get_choices(self):
        choices = []
        try:
            expenses_names = CATEGORY[self.parent_value]
            for name in expenses_names:
                choices.append((name, name))
        except KeyError:
            return []
        return choices
#admin.py
@admin.register(models.AccountBook)
class AccountBookAdmin(admin.ModelAdmin):
    list_display = (
        # "account_classification",
        # "account_category",
        "account_amount",
        "account_reference",
        "account_manager",
        "account_recoder"
    )

    date_hierarchy = 'created_time'
# helpers.py
CARD_EXPENSES = 'card_expenses'
CASH_EXPENSES = 'cash_expenses'
DEPOSIT_EXPENSES = 'deposit_expenses'

EXPENSES = (
    (CARD_EXPENSES, 'card_expensess'),
    (CASH_EXPENSES, 'cash_expensess'),
    (DEPOSIT_EXPENSES, 'deposit_expensess')
)

CATEGORY = {
    CARD_EXPENSES : ['delivery', 'quick_service', 'waste', 'food_expenses', 'supplies', 'etc'],
    CASH_EXPENSES : ['delivery', 'quick_service', 'waste', 'food_expenses', 'supplies', 'hospital_director', 'etc'],
    DEPOSIT_EXPENSES : ['pay_acquaintance']
}
Вернуться на верх