[Django] PWyświetlaniem zawartości z listy rozwijanej.

0

Problem:
Przy otwieraniu listy rozwijanej wyświetla mi zły tekst w opcjach wyboru:

{'name': u'120'}"
{'name': u'Program aktywizacji strategicznych teren\xf3w inwestycyjnych'}
{'name': u'Program rozwoju transportu dla miasta Mys\u0142owice'}"

Jak zrobić, żeby wyświetlał sam tekst:
"Program aktywizacji [...]" bez tych znaczników {'name'}:u'
Szukałem po stackoverflow, django i innych forach i nie poradziłem sobie.
Tutaj obrazek:
user image

models.py:

from django.db import models

class programstrategiczny(models.Model):

    name = models.CharField(max_length=120)<,code>

forms.py

from django import forms
from models import programstrategiczny

class ListaForm(forms.Form):
lista = forms.ModelChoiceField(queryset=programstrategiczny.objects.values('name'),
empty_label="")


views.py

from django.shortcuts import render
from django.http import HttpResponseRedirect
from forms import ListaForm

def get_lista(request):
if request.method == 'POST':
form = ListaForm(request.POST)
if form.is_valid():
return HttpResponseRedirect('/thanks/')
else:
form = ListaForm()

return render(request, 'plik.html', {'form': form})

szablon html:

<body> <form action="/your-name/" method="post"> {% csrf_token %} {{ form }} </form> </body> ```

Powie mi ktoś, gdzie popełniłem błąd? :)
Od niedawna bawię się Pythonem i mam zamiar w ramach praktyki stworzyć niewielką aplikację w Django.

1

Tak na szybko wydaje mi się, że w modelu brakuje Ci (w zależności od wersji Pythona)

def __unicode__(self):
        return self.name

def __str__(self):
        return self.name

https://docs.djangoproject.com/en/1.9/ref/forms/fields/#modelchoicefield

The str (unicode on Python 2) method of the model will be called to generate string representations of the objects for use in the field’s choices; to provide customized representations, subclass ModelChoiceField and override label_from_instance. This method will receive a model object, and should return a string suitable for representing it. For example:

0

Postaw sobie breakpointa w miejscu przypisania do zmiennej "lista" (swoją drogą nie używaj polskich nazw):

 class ListaForm(forms.Form):
    lista = forms.ModelChoiceField(queryset=programstrategiczny.objects.values('name'),
    empty_label="")

i zobacz co wrzucasz tutaj do tego queryseta.

Ogólnie to słabo szukałes, bo funkcja .values() zwraca Ci słownik, czyli własnie {'name': 'something'}. Teraz musisz wskazać nazwę pola, które ma być użyte w tym ModelChoiceField czyli:

lista = forms.ModelChoiceField(queryset=programstrategiczny.objects.values('name'), to_field_name="name",
    empty_label="")
0

Problem rozwiązany.
@adhed dzięki, zmienię nazwy zmiennych na angielskie.

Wystarczy values zmienić na order_by

class ListaForm(forms.Form):
lista = forms.ModelChoiceField(queryset=programstrategiczny.objects.order_by('name'),
empty_label="")

I dodać dwie metody, tak jak @artur_waw doradził.

Dzięki chłopaki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1