Как сделать тройной подслой Choicefiled в Django?
Я заметил, что в официальном документе упоминается только двухслойный choiceFiled. Когда я кодирую трехслойную структуру данных, выскакивает уведомление.
(fields.E005) 'choices' must be an iterable containing (actual value, human readable name) tuples.
<
choices=(
("city", (
("USA", "USA"),
("Canada", "Canada"),
("UK", (
("England": "England",)
("Scotland": "Scotland"),
)),
)),
),
.например:
Можете ли вы привести пример, как создать виджет для решения этой задачи?
Просто вы можете сделать вот так:
class ExpenseForm(forms.Form):
CHOICES = (
('Debt', (
(11, 'Credit Card'),
(12, 'Student Loans'),
(13, 'Taxes'),
)),
('Entertainment', (
(21, 'Books'),
(22, 'Games'),
)),
('Everyday', (
(31, 'Groceries'),
(32, 'Restaurants'),
)),
)
amount = forms.DecimalField()
date = forms.DateField()
category = forms.ChoiceField(choices=CHOICES)
models.py
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=30)
parent = models.ForeignKey('Category', on_delete=models.CASCADE, null=True)
def __str__(self):
return self.name
class Expense(models.Model):
amount = models.DecimalField(max_digits=10, decimal_places=2)
date = models.DateField()
category = models.ForeignKey(Category, on_delete=models.CASCADE)
def __str__(self):
return self.amount
Итак, теперь наша категория вместо обычного поля выбора теперь является моделью, и модель расходов имеет связь с ней с помощью внешнего ключа.