Я хочу проверить отфильтрованное поле в выпадающем списке в 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']
}