Как сделать тройной подслой 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

Итак, теперь наша категория вместо обычного поля выбора теперь является моделью, и модель расходов имеет связь с ней с помощью внешнего ключа.

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