18.06.2009 10:38

  1. Была у меня форма ModelForm и все работало. Потом я перенес одно из полей модели (address) в отдельную таблицу, связанную через OneToOneField. Теперь никак не могу заставить форму работать. Мне нужно чтобы это поле можно было редактировать как прежде, но обновлялась связанная таблица.

    Код:

     class AddCarWashForm(forms.ModelForm):
          address = forms.CharField(u'Адрес',
               help_text=u"например: Киев, ул. Эжена Потье, 1")
          class Meta:
                model = CarWash 
                fields = ('name', 'phone', 'description', 'type')
    

    Выдает непонятный TypeError 'str' object is not callable. Трейсбека нет:

    Traceback:
    File "/var/lib/python-support/python2.6/django/core/handlers/base.py" in get_response
      86.                 response = callback(request, *callback_args, **callback_kwargs)
    

    WTF? Можно ли заставить ModelForm работать или проще переписать через обычную форму?

  2. address = forms.CharField(u'Адрес', help_text=u"например: Киев, ул. Эжена Потье, 1")

    А вот это раньше работало? У forms.CharField первый параметр - max_length, а не label...

  3. Кстати, если поле формы address всё равно создаётся из поля модели, то лучше его не полностью вручную переписывать (включая тип, max_length и прочее), а таки создавать автоматически:

    def model_field(model, fieldname, **kwargs):
        return model._meta.get_field(fieldname).formfield(**kwargs)
    
    class AddCarWashForm(forms.ModelForm):
        address = model_field(Address, 'address', help_text=u"например: Киев, ул. Эжена Потье, 1")
        class Meta:
            model = CarWash 
            fields = ('name', 'phone', 'description', 'type')
    

    (model_field введена только для того, чтобы сэкономить на буквах)

  4. О, спасибо за хинт насчет model_field, запомню.

    Для этого случая думаю писать вручную форму, без ModelForm

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.