Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 6, 2012 15:04:04

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Прошу пояснить работу с формами!

Добрый всем день камрады.
Джанго только учу и паралельно пробую сотворить маленький сайтик.
Так вот, понадобилось мне на сайте добавить список выбора. Но заполнять список данными в HTML файле мне не улыбается, потому что списки будут весьма внушительные. Да и следить за их актуальность не совсем удобно. По сему я решил заполнять список динамически, взяв данные из базы данных.
Мой метод весьма прост

models

class Pol(models.Model):
    pol = models.CharField('Пол', max_length=1)
    def __unicode__(self):
        return self.pol

views
def index(request):
ld = Pol.objects.all()
return render_to_response('phonelist/main.html', {'ld': ld})

main.html

<select name="slist">
            <option value="0">Список полов</option>
            {% for i in ld %}
                <option value="{{ i.id }}">{{ i.pol }}</option>
            {% endfor %}
        </select>
Ну пока все работает и значения список мне отдает.
Но почемуто мой метод являеться не кашерным и надо делать через формы. При етом я уже 5 раз прочитал мануал но самостоятельно понять не могу. А на вопрос помочь - полчучаю лишь сухой код который ничем не отличаеться от мануала.
например на дружественном ресурсе мне посоветовали заменить мой код чем то таким

SEX_MALE = 1
SEX_FEMALE = 2
SEX_CHOICES = (
    (SEX_MALE, _(u'Male')),
    (SEX_FEMALE, _(u'Female'))
)
class Title(models.Model):
    name = models.CharField()
class People(models.Model):
    name = models.CharField()
    sex = models.IntegerField(choices=SEX_CHOICES)
    title = models.ForeignKey(Title)
class PeopleForm(forms.ModelForm):
    class Meta:
        model=People
def page():
    form = PeopleForm(request.GET or None)
    if form.is_valid():
        form.save()
        return redirect(reverse('next-page'))
    context = dict(form=form)
    return direct_to_template(request, 'page.html', context)

Скажите почему надо писать кода больше? Зачем так усложнять?: Зачем для запроса в существующий уже класс модели еще один подкласс если я и так получаю данные ?

Я прошу вас Реально обьяснить мне чем мой метод плох, что я не учел ? Какие проблемы он вызовет при работе с ним в будующем ?
И найдутся ли среди вас те, которые смогут мое творение переписать правильНо ?: используя формы - но так что бы я не просто скопировал вставил, а именно понял зачем ето делается и как работает.
Заранее благодрарствую. Думаю я не первый из армии чайников кто вспотыкается именно на этом моменте (возможно частично проблема в сухой документации этого вопроса или плохим примером)



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#2 Ноя. 7, 2012 02:56:19

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Прошу пояснить работу с формами!

ZerG
Скажите почему надо писать кода больше? Зачем так усложнять?:

Почему больше кода это у тебя надо спросить))Откуда ты его взял и т.п.
Исзодя из последнего кода, ничего там не усложнено. Просто немножко шире функционал… Я так понимаю не ты его делал…

ZerG
Зачем для запроса в существующий уже класс модели еще один подкласс если я и так получаю данные ?

читай еще раз вот это https://docs.djangoproject.com/en/1.4/topics/forms/
и это https://docs.djangoproject.com/en/1.4/topics/forms/
там всё есть

Этими строками ты сократил себе код:
class PeopleForm(forms.ModelForm):
    class Meta:
        model=People
Это то же самое что:
class PeopleForm(forms.Form) #заметь родитель поменялся
    name = forms.CharField()
    sex = forms.ChoiceField(choices=SEX_CHOICES) #тут я заменил тип поля с IntegerField на ChoiceField
    title = forms.ModelChoiceField(queryset=Title.objects.all()) 
Соответственно если у тебя очю большие модели тебе не нужно писать дофига кода для объявления формы этой модели. Плюс, если ты поменяешь модель, тебе так же не придется менять поля формы, всё автом-ки поменяется. Но ты в силах переопределять поля формы в соответствии с правилами ООП в python.

Не парься по поводу правильности. Выше головы не прыгнешь…
Я надеюсь, что хоть что-нибудь написал понятно))

Офлайн

#3 Ноя. 7, 2012 08:29:21

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Прошу пояснить работу с формами!

Спасибо суть я уловил ! Попробую конечно сделать правильно - но пока что-то не выходит !


Согласен. Я буду делать лишнюю работу. Вот это уже аргумент. Тогда получается что для моего конкретного случая надо делать так
Модели Моя существующая модель. Заполнена данными типа (Специалист, Начальник, Дворник, ….) class Dolzhnost(models.Model): dolzhnost = models.CharField('Должность', max_length=100)
def __unicode__(self):
return self.dolzhnost
Добавляем класс форм

class DForm(forms.ModelForm):
class Meta:
modelolzhnost

Далее, нам надо вьюшка
Сейчас у меня основной шаблон вызывается функцией index

def index(request):
return render_to_response('phonelist/main.html')
Может кто набросает функцию вью ? Потому что угадать не получается а понять тоже! То есть у меня проблема не с моделями а с самой функцией. А если еще и комменты напишите так вобще щастье будет !



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Отредактировано ZerG (Ноя. 7, 2012 08:43:57)

Офлайн

#4 Ноя. 7, 2012 09:40:38

Evgen_irk
От: Иркутск
Зарегистрирован: 2009-02-02
Сообщения: 45
Репутация: +  4  -
Профиль   Отправить e-mail  

Прошу пояснить работу с формами!

Формы нужны для записи информации о пользователе и т.п. в базу данных.
Для вывода из БД в шаблон формы можно не использовать.



wxPython

Отредактировано Evgen_irk (Ноя. 7, 2012 09:44:24)

Офлайн

#5 Ноя. 7, 2012 09:47:02

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Прошу пояснить работу с формами!

ТО есть - можно смело использовать мой вариант ?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#6 Ноя. 7, 2012 09:54:35

Evgen_irk
От: Иркутск
Зарегистрирован: 2009-02-02
Сообщения: 45
Репутация: +  4  -
Профиль   Отправить e-mail  

Прошу пояснить работу с формами!

Могу ошибаться (опыт с django небольшой), но думаю что да.



wxPython

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version