Создание сложных форм Джанго - PullRequest
0 голосов
/ 06 декабря 2010

Я пытался решить эту проблему в течение нескольких дней и мог бы использовать немного внешнего ввода.

Каков наилучший способ создания форм для этих родственных моделей:

STATUSES = (('1', 'Draft'), ('2', 'Active'), ('3', 'Deleted'), ('4', 'Credited'))
class Contract(models.Model):
    details = ForeignKey(Order)
    status = CharField(max_length=1, choices=STATUSES)

class Product1Order(Order):
     items = ManyToManyField(Item)
     # + more product specifics

class Item(models.Model):
    tag = ForeignKey(Tag)
    status = CharField(max_length=1, choices=STATUSES)
    price = PositiveIntegerField()

Я начал искать Formsets, но я не мог понять смысл их использования для этого.
Если я использую ModelForms, поле состояния будет конфликтовать в ModelA и ModelC, и если я хочу, чтобы другие поляотображаться на разных страницах в моих приложениях, мне нужно будет скопировать и вставить формы модели в новую модель и изменить поля Meta-exclude / для объекта формы?

Если у кого-нибудь есть какие-либо подсказки, я быочень благодарен.

1 Ответ

1 голос
/ 06 декабря 2010

Во-первых, это слишком абстрактно, чтобы понять, что вы хотите сделать. Почему есть два поля состояния? Что на самом деле означают разные отношения? Какие ограничения

Во-вторых, вы запутались в формах. Для начала, нет способа сделать несколько вложенных встроенных форм - они работают только для отношений между родителями и детьми - вы можете иметь несколько отношений родитель-потомок, но не родитель -> ребенок -> внук, как здесь. Но если бы это сработало, не было бы никакого столкновения между различными полями статуса - они на разных моделях.

В-третьих, нет смысла что-либо копировать и вставлять. Наборы форм - это классы, поэтому вы можете легко разделить их на подклассы и использовать различные значения exclude, или даже использовать один класс с методом __init__, который принимает дополнительный параметр, чтобы решить, какие поля исключать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...