Форма Django не отображает конкретные данные - PullRequest
4 голосов
/ 23 июля 2010

Скажем, у меня есть такая модель:

class Fleet(models.Model):
    user = models.ForeignKey(User)
    [...]
    ship1 = models.IntegerField(default=0)
    ship2 = models.IntegerField(default=0)
    ship3 = models.IntegerField(default=0)
    ship4 = models.IntegerField(default=0)

И форма:

class sendFleet(forms.Form):
    [...]
    ship1 = forms.IntegerField(initial=0)
    ship2 = forms.IntegerField(initial=0)
    ship3 = forms.IntegerField(initial=0)
    ship4 = forms.IntegerField(initial=0)

Как сделать поля формы скрытыми, если у пользователя естьнет доступных кораблей (т. е. = 0 в модели флота)?

Ответы [ 2 ]

2 голосов
/ 23 июля 2010

Вы можете переопределить методы visible_fields (или hidden_fields, если вы действительно хотите скрытое поле) в своей форме, чтобы пометить их как «невидимые» (или скрытые входы).Подробнее см. документы .

РЕДАКТИРОВАТЬ: что-то вроде этого должно работать ...

class sendFleet(forms.Form):
    [...]
    ship1 = forms.IntegerField(initial=0)
    ship2 = forms.IntegerField(initial=0)

    def visible_fields(self):
        # create a list of fields you don't want to display
        invisibles = []
        if self.instance.ship1 == 0:
            invisibles.append(self.fields['ship1'])

        # remove fields from the list of visible fields
        visibles = super(MailForm, self).visible_fields()
        return [v for v in visibles if v.field not in invisibles]

Тогда в вашем шаблоне:

{% for field in form.visible_fields %}
    {{ field.label_tag }} : {{ field }}
{% endfor %}
1 голос
/ 23 июля 2010

Кажется, что эту проблему лучше решить, используя ManyToManyField от Fleet to Ship или ForeignKey от Ship to Form, а затем просто ModelMultipleChoiceField в вашей форме ... но, возможно, что-то есть Я не понимаю.

В любом случае, MultipleChoiceField, вероятно, будет лучше, чем этот набор IntegerFields. Это в основном то, для чего предназначен MultipleChoiceField.

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