ModelChoiceField django

时间:2014-07-31 17:12:40

标签: python django

我创建了一个Django表单来从用户那里获取数据并在数据库模型中搜索给定的数据。 但我无法正确使用下拉功能。我使用过ModelChoiceField但是我把它弄空了。 我有三个字段(forms.py),我在数据库中搜索。

models.py

class Release(models.Model):
    number = models.CharField(max_length=50,unique=True)
    notes = models.CharField(max_length=50)
    changes = models.CharField(max_length=50)

    def __unicode__(self): 
        return unicode(self.number)

class Metamodule(models.Model):
    name = models.CharField(max_length=50,unique=True)
    version = models.IntegerField(default=0)
    release = models.ForeignKey(Release,related_name="num")
    createdate = models.DateField(auto_now=True, null=True)
    createdby = models.CharField(max_length=50)

    def __unicode__(self): 
        return unicode(self.name)


class Module(models.Model):
    name = models.CharField(max_length=50,unique=True)
    version = models.IntegerField(default=0)
    metamodule = models.ForeignKey(Metamodule,related_name="metaname")
    createdate = models.DateField(auto_now=True, null=True)
    changes = models.CharField(max_length=50)

    def __unicode__(self): 
        return unicode(self.name)

forms.py

class ModuleForm(forms.Form):
     release_num = forms.ModelChoiceField(queryset=Release.objects.all().values('number'),empty_label='Pick a Release')
     metamodule_name = forms.CharField(max_length=50)
     module_name = forms.CharField(max_length=50)

views.py

from django.shortcuts import render
from search.forms import ModuleForm
from django.http import HttpResponse
from search.models import Module,Metamodule,Release

def searchview(request):
     if request.method == 'GET':
    form = ModuleForm(request.GET)  
    if form.is_valid():
      release_num = form.cleaned_data['release_num']
      metamodule_name = form.cleaned_data['metamodule_name']
      module_name = form.cleaned_data['module_name']
      results = Module.objects.filter(metamodule__release__number=release_num).filter(metamodule__name=metamodule_name).filter(name=module_name)
      return render(request,'search/search_result.html',{'form': form, 'results': results})
     else:
     form = ModuleForm()    
     return render(request, 'search/search_form.html',{'form': form})

search_form.html

<html>
<head>
    <title>Search</title>
</head>
<body>
     {% if error %}
        <p style="color: red;">Please submit a search term.</p>
    {% endif %}
    <form action="/search/" method="get">
        <select name="release_num">
            {% for release_num in release_num %}
            <option value="{{ release_num.number }}">{{ release_num.number }}</option>
            {% endfor %}
    </select>   
    <p><label for="metamodule_name">Metamodule:</label>
    <input type="text" name="metamodule_name">
    <p><label for="module_name">Module:</label>
    <input type="text" name="module_name">
    <input type="submit" value="Search">
    </form>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

尝试搜索search_form.html:

 <form action="/search/" method="get">
    {{ form.release_num }}
   {{ form.metamodule_name  }}
   {{ form.module_name }}