2013-05-15 5 views
0

Привет, у меня есть проблема, потому что я использую smart select (3 поля выбора) для фильтрации моей таблицы. Но идентификатор двигателя неправильный и не получает запрос corect. Мне нужно получить идентификатор от db, а общие имена.Форма cleaned_data и получение значений

views.py

def spec_list(request): 
if request.method == 'GET': 
    form = SpecForm(request.GET) 
    if form.is_valid(): 
     mark = form.cleaned_data['mark'] 
     model = form.cleaned_data['model'] 
     engine = form.cleaned_data['engine'] 
     all_datap = Spec.objects.filter(mark=mark).filter(model=model).filter(engine=engine) 
     return render(request, 'specyfikacja/specyfikacja.html', {'form': form,'all_datap' : all_datap}) 
else: 
    form = SpecForm() 
return render(request, 'specyfikacja/specyfikacja.html', {'form': form}) 

От

mark = form.cleaned_data['mark'] 

им адресности ид, как "1", но нужно назвать как "Porshe"

models.py

from django.db import models 
from smart_selects.db_fields import ChainedForeignKey 

class Mark(models.Model): 
    mark = models.CharField(max_length = 60)  
    def __unicode__(self): 
     return unicode(self.mark) 

class Model(models.Model): 
    mark = models.ForeignKey(Mark) 
    model = models.CharField(max_length = 300) 
    def __unicode__(self): 
     return unicode(self.model) 

class Engine(models.Model): 
    model = models.ForeignKey(Model) 
    engine = models.CharField(max_length = 300) 
    def __unicode__(self): 
     return unicode(self.engine) 


class Spec(models.Model): 
    mark = models.ForeignKey(Mark) 
    model = ChainedForeignKey(Model, chained_field = "mark", chained_model_field = "mark", show_all = False, auto_choose= True) 
    engine = ChainedForeignKey(Engine, chained_field = "model", chained_model_field = "model", auto_choose= True) 
    oe = models.CharField(max_length=4, null=True, blank=True) 
    plt = models.CharField(max_length=3, null=True, blank=True) 
    szer = models.CharField(max_length=5, null=True, blank=True) 
    series = models.CharField(max_length=5, null=True, blank=True) 
    zr = models.CharField(max_length=5, null=True, blank=True) 
    r = models.CharField(max_length=2, null=True, blank=True) 
    rim = models.CharField(max_length=5, null=True, blank=True) 
    def __unicode__(self): 
     return unicode(self.mark) 

forms.py

class SpecForm(ModelForm): 
    class Meta: 
     model=Spec 
     fields = ('mark','model','engine') 

шаблон

<div class="subnav"> 
    <div class="row-fluid"> 
    <form action="" method="get"> 
     <div class="span3"> 
      {{ form.mark }} 
     </div> 
     <div class="span3"> 
      {{ form.model }} 
     </div> 
     <div class="span3"> 
      {{ form.engine }} 
     </div> 
     <div class="span1"><input class="btn btn-success" type="submit" value="Pobierz" /></div> 
    </form> 
    </div> 
</div> 
+0

Не могли бы вы также использовать код формы, пожалуйста, –

+0

Хорошо. Im отредактировал 1 сообщение. – pejot

+0

Почему вам нужно имя в представлении? – karthikr

ответ

0

потому, что "двигатель" не является объектом и просто строка ... попробовать ...

all_datap = Spec.objects.filter(mark__id=mark, model=model, engine__engine=engine).distinct() 

должен сделать трюк.

+0

Ошибка: Присоединиться к полю «двигатель» не разрешено. Вы пропустили «двигатель» для типа поиска? – pejot