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