Сразу говорил - гуглил и форум читал. Но все же вопрос остался актуальным.
Итак, изначально задача стояла такая:
Как сделать в форме выпадающий список по какому то полю(столбцу) таблицы БД?
Как сделать это лучше и изящнее?
Класс формы, который надо реализовать
class OrgForm(forms.Form):
name = forms.CharField (max_length=100)
street = forms.CharField (max_length=50)
house = forms.CharField (max_length=10)
rubr=выпадающий список модель Rubric поле name
city=выпадающий список модель Cities поле name
Причем по количеству они совпадают, но вот поле name не выводится
Как то догадался до такого:
class OrgForm(forms.Form):
rubr=mdl.Rubric.objects.all().values_list('id','name')
cities=mdl.City.objects.all().values_list('id','name')
...
rubr=forms.CharField(widget=forms.Select(choices=rubr))
city=forms.CharField(widget=forms.Select(choices=cities))
1. почему в values_list нужно указывать больше одного поля (хотя выводится только последнее, но Django не дает указать одно)
2. Именно так люди и делают выпадающие списки???
if answer2==False:
Как грамотнее сделать?
Как это потом прочитать и занести в Таблицу org id_rubr и id_city как внешний ключ?
Как это правильно должно выглядеть в шаблоне?
Если нужно:
view.py:
...
def addorg(request):
if request.method=='POST':
form=frm.OrgForm(request.POST)
if form.is_valid():
data=form.cleaned_data
item=mdl.Organisation()
#item.name=data['name']
#item.save()
params={'msg':'Организация "'+item.name.encode('utf-8')+'" добавлена успешно',
'link':'/../db/organisations',
't':2}
return ShowMessage(**params)
else:
form=frm.OrgForm()
cntx = Context ({'form':form,'post':True})
else:
form=frm.OrgForm()
cntx = Context ({'form':form,'post':False})
ldr = loader.get_template('s_add_org.html')
return hr(ldr.render(cntx))
...
<form action="" method="post">
<table width="50%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>Название организации:</td>
<td>{{ form.name }}*</td></tr>
<tr>
<td>Рубрика:</td>
<td>{{ form.rubr}}*</td></tr>
<tr>
<td>Город:</td>
<td>{{ form.city }}*</td></tr>
<tr>
<td>Улица:</td>
<td>{{ form.street }}*</td></tr>
<tr>
<td>Дом:</td>
<td>{{ form.house }}*</td></tr>
<tr><td colspan="2">* - необходимые поля </td></tr>
<tr><td colspan="2"> </td></tr>
<tr>
<td><div align="center"><input type="submit" value="Добавить" name="submit" style='width: 100px;'></div></td>
<td><div align="center"><a href="/db/organisations"><input type="button" value="Отмена" name="button" style='width: 100px;'></a></div></td>
</tr>
</table>
</form>
...
class Organisation(models.Model):
name = models.CharField (max_length=100)
street = models.CharField (max_length=50)
house = models.CharField (max_length=10)
rubr = models.ForeignKey(Rubric)
city = models.ForeignKey(City)
def _unicode_(self):
return self.name,self.street
class Meta:
ordering = ["name"]