Найти - Пользователи
Полная версия: Прошу пояснить работу с формами!
Начало » Django » Прошу пояснить работу с формами!
1
ZerG
Добрый всем день камрады.
Джанго только учу и паралельно пробую сотворить маленький сайтик.
Так вот, понадобилось мне на сайте добавить список выбора. Но заполнять список данными в 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)

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

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

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


Согласен. Я буду делать лишнюю работу. Вот это уже аргумент. Тогда получается что для моего конкретного случая надо делать так
Модели Моя существующая модель. Заполнена данными типа (Специалист, Начальник, Дворник, ….) 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')
Может кто набросает функцию вью ? Потому что угадать не получается а понять тоже! То есть у меня проблема не с моделями а с самой функцией. А если еще и комменты напишите так вобще щастье будет !
Evgen_irk
Формы нужны для записи информации о пользователе и т.п. в базу данных.
Для вывода из БД в шаблон формы можно не использовать.
ZerG
ТО есть - можно смело использовать мой вариант ?
Evgen_irk
Могу ошибаться (опыт с django небольшой), но думаю что да.
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