J'ai une simple base de données avec des tables:
Société
Comment ajouter une option pour tout voir (*) dans Django?
'CompanyID', 'int(10) unsigned', 'NO', 'PRI', NULL, 'auto_increment'
'CompanyName', 'varchar(70)', 'NO', '', NULL, ''
'Type', 'enum(\'C\',\'M\',\'S\',\'A\')', 'NO', 'MUL', NULL, ''
'Country', 'varchar(60)', 'YES', 'MUL', NULL, ''
'Website', 'varchar(60)', 'YES', '', NULL, ''
'Email', 'varchar(60)', 'YES', '', NULL, ''
'Telephone', 'double unsigned', 'YES', '', NULL, ''
'Maps_Link', 'varchar(60)', 'YES', '', NULL, ''
SociétéDétails
'CompanyDetailsID', 'int(10) unsigned', 'NO', 'PRI', NULL, 'auto_increment'
'CompanyID', 'int(10) unsigned', 'NO', 'MUL', NULL, ''
'Type', 'enum(\'C\',\'M\',\'A\',\'S\')', 'NO', '', NULL, ''
'Category', 'enum(\'MEP Consultant\',\'Lighting Designer\',\'Architect\',\'Interior Designer\',\'MEP Contractor\',\'Fitout Contractor\',\'Procurement Company\',\'Developer\',\'Outdoor-Architectural\',\'Indoor-Architectural\',\'Indoor-Decorative\',\'Outdoor-Decorative\',\'Lamps\',\'Drivers\',\'Control Systems\',\'Landscaping Consultant\',\'Landscaping Contractor\',\'Other\')', 'NO', '', NULL, ''
'Comments', 'blob', 'YES', '', NULL, ''
et 3 autres tables (Contactez, Continent, Produit)
J'ai créé une application CompanyBrowser. Je suis en train de faire une forme simple avec des menus déroulants pour:
- type (de société)
- Catégorie (de la société)
- Pays (de la société)
Pour Dans chacun de ces cas, je souhaite que l'utilisateur ait la possibilité de sélectionner tout (*) dans le menu déroulant.
Voici mon urls.py:
urlpatterns=[url(r'^$',views.Index,name='index'),
url(r'^(?P<company_type>[CMSA*])/$',views.ResultsView.as_view(), name='results'),
url(r'^(?P<company_type>[CMSA*])/(?P\<company_category>\w+)/$',views.ResultsView.as_view(), name='results'),
url(r'^(?P<company_type>[CMSA*])/(?P<company_category>\w+)/(?P<company_country>\w+)/$',views.ResultsView.as_view(), name='results'),
]<br>
Fondamentalement, j'exposerons selon url CompanyBrowser/company_type/company_category/company_country, où l'utilisateur peut entrer * dire, tout pour tout le champ de recherche.
C'est le ResultsView j'ai codé jusqu'à présent:
class ResultsView(generic.ListView):
template_name='CompanyBrowser/results.html'
context_object_name="results_of_company_type_query"
def get_queryset(self):
print(len(self.kwargs))
if len(self.kwargs)==1:
if self.kwargs['company_type']!="*":
return Company.objects.filter(companytype=self.kwargs['company_type'])
else return Company.objects.all()
elif len(self.kwargs)==2:
if self.kwargs["company_type"]=="M":
if self.kwargs["company_category"]=="Indoor-Decorative":
return Company.objects.filter(companytype=self.kwargs['company_type'], companydetails__category=self.kwargs['company_category'])
Quelle est une façon élégante de le faire au lieu de faire toutes les combinaisons de si elses? Je pense que cela pourrait être facilement fait s'il y avait une option pour entrer tout dans la requête de filtre, peut-être?
Je crois que l'utilisation de contenu dans la requête de filtre pourrait aider. – user1926852
Le code using contient fonctionne bien pour moi. Le seul problème que j'ai est l'interrogation par pays car mon pays est une clé étrangère. Aucune suggestion? – user1926852