LINUX.ORG.RU

Как изменить тип поля в GAE Django?


0

1

Всем доброго дня и с праздником. У меня имеется следующий вопрос: Имеется следующая модель в джанге, поставляемой в GAE: файл: models.py

from google.appengine.ext import db
class commonProperty (db.Model):
    title               = db.StringProperty     (verbose_name = "Entry title", multiline = False)
    slug                = db.StringProperty     (verbose_name = "Entry title in URL string (slug)", multiline = False)
    parentId            = db.IntegerProperty    (verbose_name = "Parent category ID")
    # остальные элементы модели поскипаны
class fEntry (commonProperty):
    body                = db.TextProperty       (verbose_name = "Message body")
    whenChanged         = db.DateTimeProperty   (verbose_name = "When message was changed last time", auto_now = True)
    # остальные элементы модели поскипаны
    def someFetchMethod (self, someParam)
        return 'param:%s'%someParam
файл: forms.py
from google.appengine.ext.db import djangoforms
from myproj.main.models import fEntry
from django import forms

# Здесь делаем я хочу сделать форму на основании модели
class entryForm(djangoforms.ModelForm):
    # и таки делаю (то есть, форма успешно отрисовывается в шаблоне и обрабатывается с помощью метода fEntry.save() во views.py)
    class Meta:
        model = fEntry
        exclude = ['slug', ] # скипаем поле slug, отрисовывается только title, parentId и body
    # а вот здесь я хочу изменить тип поля parentId с TextInput (которое по-умолчнию создается Meta`ой) на HiddenForm
    def __init__(self, *args, **kwargs):
        super(entryForm, self).__init__(*args, **kwargs)
        self.fileds['parentId'].widget = HiddenInput()
Вроде бы все должно работать (то есть гугль утверждает, что у всех работает). Однако, выдается следующий трейсбек:
TypeError at /myproj/thread/9/vopros-1/
__init__() takes at least 2 arguments (1 given)
Request Method: 	GET
Request URL: 	http://127.0.0.1:8080/myproj/thread/9/vopros-1/
Exception Type: 	TypeError
Exception Value: 	__init__() takes at least 2 arguments (1 given)
Exception Location: 	~/gae/myproj/myproj/main/forms.py in __init__, line 19

Traceback (most recent call last):
File "~/google_appengine/lib/django/django/core/handlers/base.py" in get_response
  77. response = callback(request, *callback_args, **callback_kwargs)
File "~/gae/pycomm/myproj/main/views.py" in showThread
  34. 'responseBox' : entryForm()
File "~/gae/pycomm/myproj/main/forms.py" in __init__
  21. self.fileds['parentId'].widget = HiddenInput()

  TypeError at /myproj/thread/9/vopros-1/
  __init__() takes at least 2 arguments (1 given)
Используемые версии: GAE SDK: Version 1.4.1
Django: 0.96.4
ОС: Linux Debian Lenny
Что я делаю не так? И как сделать «так»?
То есть, понятно, что можно руками вписать это самое <input type=«hidden» name=«parentId».../>, но, все-таки очень хочется разобраться в том, как выставлять нужный виджет элементам формы.



Последнее исправление: jmp (всего исправлений: 1)

class entryForm(djangoforms.ModelForm):
    parentId = forms.IntegerField(widget=HiddenInput())

    class Meta:
        model = fEntry
        exclude = ['slug', ]
anonymous
()
Ответ на: комментарий от anonymous

это не для gae-django:

parentId = forms.IntegerField(widget=HiddenInput())
да и этот код тоже выдает ту же самую ошибку:
class entryForm(djangoforms.ModelForm):
    parentId = forms.IntegerField(widget=forms.HiddenField())
    class Meta:
        model = fEntry
        exclude = ['slug', ]

jmp
() автор топика
Ответ на: комментарий от anonymous

Данная проблема, похоже, справдлива только для django 0.96.
Скачал gae-1.4.2, переписал в настройках gae использование django 1.2 и получил желанное поле hidden, как выше советовал анонимус. То есть, невозможность переопределить количество и характер полей формы есть особенность django 0.96, которая позже была решена.

jmp
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.