Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 23, 2009 11:42:07

avekir
От:
Зарегистрирован: 2009-01-03
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

models.Model и forms.Form

Привет всем!

Я только начинаю учить Django и у меня возник вопрос.


У меня есть модели с описанием структуры БД.

Есть страничка из которой делаются запрос на использование БД (запись или чтение данных из БД)

Ну и конечно необходимо проверить данные передаваемые из этой странички (html).

Я почитал документы и мануалы и пришел к выводу (надеюсь неверному), что для того, чтобы проверить данные необходимо отдельно создать файл forms.py (можно и не отдельно, но для простоты) и там прописать собственно правила проверки.

Так вот, а нельзя ли как-нибудь без этих форм сделать проверку по моделям БД?

Для меня не понятно, зачем писать два раза почти одно и тоже…. т.е. хотелось бы что-то типа иметь такое:

class Admins(models.Model):
тра та та



def new_user(request):
form = Admins(request.POST)
if form.is_valid()
Спасибо!



Офлайн

#2 Янв. 23, 2009 13:22:34

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

models.Model и forms.Form

Не совсем ясно что вы подразумеваете под “проверкой”.

Конечно объект модели можно создать просто из запроса:

obj = MyModel(foo=request.POST["foo"], bar=request.POST["bar"])
obj.save()
Или получить имеющийся:
obj = MyModel.objects.get(foo=request.POST["foo"])
Формы нужны для валидации входных данных. Форма может автоматически создаваться по модели:
class MyModelForm(forms.Form):
class Meta:
model = MyModel
ну вариантов много и их использование на вашем усмотрении.



Офлайн

#3 Янв. 23, 2009 13:49:45

avekir
От:
Зарегистрирован: 2009-01-03
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

models.Model и forms.Form

Спасибо за ответ.

Я как раз и имел ввиду валидацию входящих данных.

Вот пример модели

class Admins(models.Model):
login = models.EmailField()
password = models.CharField(max_length=20)
company = models.CharField(max_length=20)

def __unicode__(self):
return '%s %s %s' % (self.login, self.password, self.company)
а вот views.py

def new_user(request):       
if request.method == "POST":
form = Admins(request.POST)
if form.is_valid():
p = Admins(login=request.POST.__getitem__('login'), password=request.POST.__getitem__('password'), company=request.POST.__getitem__('company'))
p.save();
return render_to_response('reg.html')
Собственно мне нужно проверить вот эти параметры на соостветсиве полям подели
request.POST.__getitem__('login'),
request.POST.__getitem__('password'),
request.POST.__getitem__('company')
Daevaorn
Daevaorn
Формы нужны для валидации входных данных. Форма может автоматически создаваться по модели:
Код:

class MyModelForm(forms.Form):
class Meta:
model = MyModel

ну вариантов много и их использование на вашем усмотрении.
Вот этот подход мне не понятен. Вас не затруднит объяснить что и как :) Если времени нету, то дайте ссылку я сам почитаю….
Честно говоря я немного разочарован, т.к. нашел всего одну ссылку в оф. сайте http://docs.djangoproject.com/en/dev/topics/forms/ но там не совсем то, что меня интересует :(

Спасибо !



Офлайн

#4 Янв. 23, 2009 13:54:02

avekir
От:
Зарегистрирован: 2009-01-03
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

models.Model и forms.Form

Дополнение

т.е. тут понятно, что

class MyModelForm(forms.Form):
class Meta:
model = MyModel
Создается class MyModelForm который автоматически создает валидацию полей для модели MyModel.
Но

Не понятен сам механизм такой записи
 class Meta:
model = MyModel
собственно почему Meta ? Зачем переменная model? И как оно будет возвращать ошибку, если не правильное только одно поле ? Как добавить дополнительно свои проверки к такому типу записи ?

С ув. Кирилл



Офлайн

#5 Янв. 23, 2009 14:03:30

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

models.Model и forms.Form

avekir
Вы немного не в том месте документацию читаете. Вот то что вам нужно:
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#topics-forms-modelforms

PS: Там маленькая неточность в моём коде: class MyModelForm(forms.ModelForm) надо



Офлайн

#6 Янв. 29, 2009 12:02:48

avekir
От:
Зарегистрирован: 2009-01-03
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

models.Model и forms.Form

спасибо, помогло



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version