Подклассификация формы модели и скрытие элементов

#django #django-models #django-forms

#django #django-модели #django-forms

Вопрос:

В соответствии с документами Django я могу сделать следующее:

 class Article(models.Model):
    headline = models.CharField(max_length=200, null=True, blank=True,
                                help_text="Use puns liberally")
    content = models.TextField()


class ArticleForm(ModelForm):
    headline = MyFormField(max_length=200, required=False,
                           help_text="Use puns liberally")

    class Meta:
        model = Article
  

В моем случае я бы хотел, чтобы «заголовок» вообще не отображался в качестве опции в подклассе. Каков наилучший способ сделать это? Я уже пробовал «исключить»

 class ArticleForm(ModelForm):


    class Meta:
        model = Article
        exclude = ["headline"]
  

Но поскольку он объявлен в родительском файле, он все равно отображается. Также я попытался объявить это как headline = «», но результат тот же.

Решение:

 def __init__(self, *args, **kwargs):
    super(NameOfSubclassedForm, self).__init__(*args, **kwargs)
    del self.fields['headline'] # field that needs removing
  

TIA

* обновление: в моем оригинальном сообщении я случайно поместил exclude outside meta

* обновление 2: уже сообщалось об ошибке:https://code.djangoproject.com/ticket/13971

* обновление 3: добавлено решение

Ответ №1:

Я полагаю, вы просто поместили свое исключение не в то место. Попробуйте это так:

 class ArticleForm(ModelForm):
    class Meta:
        model = Article
        exclude = ("headline",)
  

Ознакомьтесь с документами.

Комментарии:

1. @peter мои извинения, я фактически поместил исключение внутри Meta, я разместил его снаружи при создании образца.

2. В таком случае, вы уверены, что все написано правильно? И правильно расставлены отступы? Именно так в документах говорится об исключении поля из ModelForm .

3. На самом деле, я только что протестировал это сам, и исключение не влияет на поле, определенное в самой форме в родительском классе. Возможно, это ошибка Django.

4. @jack: Я уверен, что все написано правильно и предназначено правильно, но всегда есть место для ошибки, но пока все, кажется, на месте. Второй раз, когда я объявил ArticleForm, был просто частью моего примера.

5. @chrispratt: Рад слышать, что кто-то еще смог воспроизвести. На данный момент я пытаюсь найти другой способ скрыть поле. У меня это работает также для элементов, которые не определены в форме.