hello Karen,
below is the code required. I hope you can help me =)
thanks in advance
Thiago
here is the FEATURE MODEL unique property
#
# Fields that should be unique together in the database.
#
unique_together = [("featureId", "pf", "intComponent", "db",
"pd")]
here is the def searchFeature in the views.py
#*****************************************************************************************************************************************************************
# searchFeature
#*****************************************************************************************************************************************************************
def searchFeature(request, view = None):
if request.method == 'POST':
form = SearchFeatureForm(request.POST)
if form.is_valid():
# Perform the query
ftrQuery = Feature.objects.all().order_by('featureId',
'pk')
# Remove empty fields and start filtering
if request.POST.__getitem__('featureId') != "":
ftrQuery = ftrQuery.filter(featureId__contains =
request.POST.__getitem__('featureId')).distinct()
if request.POST.__getitem__('name') != "":
ftrQuery = ftrQuery.filter(name__icontains =
request.POST.__getitem__('name')).distinct()
if request.POST.__getitem__('pf') != "":
ftrQuery = ftrQuery.filter(platform =
request.POST.__getitem__('pf')).distinct()
if request.POST.__getitem__('state') != "":
ftrQuery = ftrQuery.filter(state =
request.POST.__getitem__('state')).distinct()
if request.POST.__getitem__('db') != "":
ftrQuery = ftrQuery.filter(drumbeat__pk =
request.POST.__getitem__('db')).distinct()
if request.POST.__getitem__('intComponent') != "":
ftrQuery = ftrQuery.filter(intComponent =
request.POST.__getitem__('intComponent')).distinct()
if request.POST.__getitem__('estimator') != "":
ftrQuery = ftrQuery.filter
(estimate__estimator__name__icontains = request.POST.__getitem__
('estimator')).distinct()
if request.POST.__getitem__('ftrStartYear') != "":
ftrStartYear = int(request.POST.__getitem__
('ftrStartYear'))
if request.POST.__getitem__('ftrStartMonth') != "":
ftrStartMonth = int(request.POST.__getitem__
('ftrStartMonth'))
if request.POST.__getitem__('owner') != "":
ftrQuery = ftrQuery.filter(owner__pk =
request.POST.__getitem__('owner'))
if request.POST.__getitem__('pd') != "":
ftrQuery = ftrQuery.filter(product__contains =
request.POST.__getitem__('pd'))
from datetime import date
if request.POST.__getitem__('ftrStartYear') != "" and
request.POST.__getitem__('ftrStartMonth') != "":
ftrQuery = ftrQuery.filter(date__gte = date
(ftrStartYear, ftrStartMonth, 1)).distinct()
if request.POST.__getitem__('teamMember') != "":
role = request.POST.__getitem__('memberRole')
if role == "ANY":
role = ""
ftrQuery = ftrQuery.filter(Q
(teammember__employee__name__icontains = request.POST.__getitem__
('teamMember')) & Q(teammember__role__contains = role)).distinct()
actualEffortLow = 0
actualEffortHigh = 0
if request.POST.__getitem__('actualEffortLow') != '':
actualEffortLow = int(request.POST.__getitem__
('actualEffortLow'))
if request.POST.__getitem__('actualEffortHigh') != '':
actualEffortHigh = int(request.POST.__getitem__
('actualEffortHigh'))
if request.POST.__getitem__('actualEffortLow') != '' or
request.POST.__getitem__('actualEffortHigh') != '':
ftrQuery = ftrQuery.filter(Q(actual__type__contains=
'effort') & Q(actual__actual__gte = actualEffortLow) & Q
(actual__actual__lte = actualEffortHigh)).distinct()
actualSizeLow = 0
actualSizeHigh = 0
if request.POST.__getitem__('actualSizeLow') != '':
actualSizeLow = int(request.POST.__getitem__
('actualSizeLow'))
if request.POST.__getitem__('actualSizeHigh') != '':
actualSizeHigh = int(request.POST.__getitem__
('actualSizeHigh'))
if request.POST.__getitem__('actualSizeLow') != '' or
request.POST.__getitem__('actualSizeHigh') != '':
ftrQuery = ftrQuery.filter(Q
(actual__type__contains='size') & Q(actual__actual__gte =
request.POST.__getitem__('actualSizeLow')) & Q(actual__actual__lte =
request.POST.__getitem__('actualSizeHigh'))).distinct()
queryTeamSizeLow = request.POST.__getitem__('teamSizeLow')
queryTeamSizeHigh = request.POST.__getitem__
('teamSizeHigh')
#Only way I could find to select with COUNT without
writting the SQL code.
if queryTeamSizeLow != '':
for item in ftrQuery:
if item.teammember_set.count() < int
(queryTeamSizeLow):
ftrQuery = ftrQuery.exclude
(featureId=item.featureId)
if queryTeamSizeHigh != '':
for item in ftrQuery:
if item.teammember_set.count() > int
(queryTeamSizeHigh):
ftrQuery = ftrQuery.exclude
(featureId=item.featureId)
queryNumDepsLow = request.POST.__getitem__('numDepsLow')
queryNumDepsHigh = request.POST.__getitem__('numDepsHigh')
if queryNumDepsLow != '':
for item in ftrQuery:
if item.dependency_set.count() < int
(queryNumDepsLow):
ftrQuery = ftrQuery.exclude
(featureId=item.featureId)
if queryNumDepsHigh != '':
for item in ftrQuery:
if item.dependency_set.count() > int
(queryNumDepsHigh):
ftrQuery = ftrQuery.exclude
(featureId=item.featureId)
if request.POST.__getitem__('dependency') != "":
for item in ftrQuery:
if item.dependency_set.filter
(dependency__name__contains = request.POST.__getitem__
('dependency')).count() == 0:
ftrQuery = ftrQuery.exclude
(featureId=item.featureId)
return render_to_response('ftrTool/searchFtr.html',
{'view':view, 'form': form, 'ftrQuery': ftrQuery},
context_instance=RequestContext
(request))
else:
form = SearchFeatureForm()
return render_to_response('ftrTool/searchFtr.html', {'view':view,
'form': form},
context_instance=RequestContext(request))
Here is the form definition
#*****************************************************************************************************************************************************************
# Search Feature Form.
#*****************************************************************************************************************************************************************
class SearchFeatureForm(forms.ModelForm):
# Default parameters, overriding required attribute to false.
featureId = forms.IntegerField(required = False,
widget=forms.TextInput(attrs={'size':'5'}))
name = forms.CharField(required = False)
platform = forms.ChoiceField(required = False, choices =
FORM_QUERY_PLATFORM_CHOICES)
drumbeat = forms.ModelChoiceField(Drumbeat.objects.all(),
required = False)
intComponent = forms.ChoiceField(required = False, choices =
FORM_QUERY_COMPONENT_CHOICES)
product = forms.CharField(required = False)
owner = forms.ModelChoiceField(Component.objects.all(),
required = False)
devType = forms.ChoiceField(label = "Development Type",
required = False, choices = FORM_QUERY_DEV_TYPE_CHOICES)
state = forms.ChoiceField(required = False, choices =
FORM_QUERY_STATE_CHOICES)
#Extra Parameters For Query
actualSizeLow = forms.IntegerField(label="Actual Size",
required = False, widget=forms.TextInput(attrs={'size':'3'}))
actualSizeHigh = forms.IntegerField(label="Actual Size",
required = False, widget=forms.TextInput(attrs={'size':'3'}))
actualEffortLow = forms.IntegerField(label="Actual Effort",
required = False, widget=forms.TextInput(attrs={'size':'3'}))
actualEffortHigh = forms.IntegerField(label="Actual Effort",
required = False, widget=forms.TextInput(attrs={'size':'3'}))
teamMember = forms.CharField(label="Team Member", required =
False, widget=forms.TextInput(attrs={'size':'25'}))
memberRole = forms.ChoiceField(label = 'As', choices =
FORM_QUERY_ROLE_CHOICES, required = False)
estimator = forms.CharField(label="Estimator", required =
False)
teamSizeLow = forms.IntegerField(label="Team Size", required
= False, widget=forms.TextInput(attrs={'size':'3'}))
teamSizeHigh = forms.IntegerField(label="Team Size", required
= False, widget=forms.TextInput(attrs={'size':'3'}))
#** ftrStartYear = forms.IntegerField(label="Year", required =
False, max_value=2100, min_value=2000, widget=forms.TextInput(attrs=
{'size':'5', 'maxlength':'4'}))
#** ftrStartMonth = forms.IntegerField(label="Month", required =
False, max_value=12, min_value=1, widget=forms.TextInput(attrs=
{'size':'2', 'maxlength':'2'}))
ftrStartYear = forms.IntegerField(label="Year", required =
False, max_value=2100, min_value=2000, widget=forms.TextInput(attrs=
{'size':'5', 'max_length':'4'}))
ftrStartMonth = forms.IntegerField(label="Month", required =
False, max_value=12, min_value=1, widget=forms.TextInput(attrs=
{'size':'2', 'max_length':'2'}))
numDepsLow = forms.IntegerField(label="Number of
Dependencies", required = False, widget=forms.TextInput(attrs=
{'size':'3'}))
numDepsHigh = forms.IntegerField(label="Number of
Dependencies", required = False, widget=forms.TextInput(attrs=
{'size':'3'}))
dependency = forms.CharField(label = "Dependency", required
= False, widget=forms.TextInput(attrs={'size':'25'}))
class Meta:
model = Feature
exclude = ('date','description', 'wikiLink')
On Jan 19, 12:37 pm, "Karen Tracey" <
kmtra...@gmail.com> wrote: