Найти - Пользователи
Полная версия: models.Model и forms.Form
Начало » Django » models.Model и forms.Form
1
avekir
Привет всем!

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


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

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

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

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

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

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

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



def new_user(request):
form = Admins(request.POST)
if form.is_valid()
Спасибо!
Александр Кошелев
Не совсем ясно что вы подразумеваете под “проверкой”.

Конечно объект модели можно создать просто из запроса:
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
ну вариантов много и их использование на вашем усмотрении.
avekir
Спасибо за ответ.

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

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

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/ но там не совсем то, что меня интересует :(

Спасибо !
avekir
Дополнение

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

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

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

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

PS: Там маленькая неточность в моём коде: class MyModelForm(forms.ModelForm) надо
avekir
спасибо, помогло
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB