Абстрактный класс Django, страница формы выбирается динамически - PullRequest
0 голосов
/ 30 января 2012

Если я создаю, т.е. элемент в /admin/product/, я получаю 2 поля, которые описаны в классе product / models.py Item: category и name;
Я бы хотел 3-е поле отображается динамически при создании элемента в зависимости от выбранной категории (a или b):

CATEGORIES = (
          ('a', 'Apple'),
          ('b', 'Banana'),
)

class Item(models.Model):
    category    = models.ForeignKey(choices=CATEGORIES)

    name        = models.CharField(max_length=255)
"""
category.a:
    color       = models.CharField(max_length=21)
category.b:
    count       = models.CharField(max_length=21)
"""

Поле name будет таким же, как для a, поэтому для b категорий и (color или count) поле появится только для (a или b) категорий соответственно;

Любая помощь очень ценится. Благодарю.

приписка
Извините за неправильное название;

1 Ответ

2 голосов
/ 30 января 2012

Я думаю, что вы пытаетесь сделать, это иметь модели, которые меняются в зависимости от категории.Я бы сделал так, чтобы определить абстрактную модель (в данном случае, вероятно, фрукт) со всей общей информацией, а затем унаследовать ее в модели, называемой бананами, и модели, называемой яблоками.

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

https://docs.djangoproject.com/en/dev/topics/db/models/#abstract-base-classes

Редактировать: К сожалению, я не знаю, как интерфейс администратора работает с абстрактными классами, и у меня нет тестовой установки под рукой.Что касается логики, в представлении я бы ожидал, что логика будет выглядеть примерно так:

from models import banana, apple
def fruitView(request)
     if request.REQUEST["Type"] = "Banana":
          b = banana(request.REQUEST["Count"])
          b.save()
     else:
          a = apple(request.REQUEST["Colour"])
          a.save()
...