Django - ChoiceField, охватывающий несколько форм - PullRequest
0 голосов
/ 22 марта 2012

Возможно ли в django иметь ChoiceField на уровне набора форм, а не встроенную форму?Так, например, если у меня есть набор форм для телефонов, и каждая встроенная форма представляет отдельную модель Phone, как я могу иметь ChoiceField, который охватывает все встроенные формы?Примерно так, где я выбираю основной телефон:

Complex ChoiceField

Мои модели:

class Profile(models.Model):
    verified = models.BooleanField(default=False)
    primary_phone = models.OneToOneField('Phone', related_name='is_primary', null=True, blank=True)

class Phone(models.Model):
    profile = models.ForeignKey(Profile, editable=False)
    type = models.CharField(choices=PHONE_TYPES, max_length=16)
    number = models.CharField(max_length=32)

    @property
    def is_primary(self):
        return profile.primary_phone == self

Я всегда могу удалить primary_phone и использовать BooleanFieldв Phone, чтобы указать, является ли это первичным или нет, но я не уверен, поможет ли это моей проблеме.

Я также ищу менее хакерский подход, более похожий на django, если это возможно.

1 Ответ

1 голос
/ 22 марта 2012

Нет способа заставить django создать это для вас автоматически. В вашей ModelForm (которая используется в строке) я бы добавил логическое поле с именем is_primary. Это поле будет отображаться на каждом встроенном экземпляре Phone (как флажок).

В интерфейсе рассортируйте его с помощью JavaScript, чтобы пользователь мог выбрать только одно значение по умолчанию за раз. В серверной части используйте некоторую настраиваемую проверку, чтобы дважды проверить, что был отправлен только один is_default, а затем при необходимости обновить primary_phone с помощью логики формы.

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