现在,为了可用性,我将一些选择字段更改为多个选择字段。当我将下拉过滤设置为使用MultipleSelectField进行排序时,不再支持或不再支持它。
是否有一种方法可以使用唯一的单个值对MultiSelectField进行筛选搜索,以同时查找单个和多个结果。
想要的功能--,我正试着按每十年的一个选项对可以找到的多个选择字段进行排序。然后搜索查找单个或多个选择结果。
Select decade
1950s
...
2000
2010
2020当前,前端显示为每个新条目创建的内容,因此如果单个组合,则为每个组合或单个条目创建一个独特的条目,使其变得丑陋和混乱。当每个选项只有一个选择,但是有许多组合的可能性现在也是唯一的时候,.distinct()工作得很好。我想我已经不再为过滤工作了。
Select decade
1950s, 1960s, 1970s
...
2000
2010, 2020
2020在视图中搜索字段中的关键字。
act / views.py
# SEARCH BASED-KEYWORD
def search(request):
act = Act.objects.order_by('-created_date')
demographics_search = Act.objects.values_list('demographics', flat=True).distinct()
defaultgenre_search = Act.objects.values_list('defaultgenre', flat=True).distinct()
decade_search = Act.objects.values_list('decade', flat=True).distinct()
genre_search = Act.objects.values_list('genre', flat=True).distinct()
# if has keyword request from the url
if 'keyword' in request.GET:
keyword = request.GET['keyword']
# check if keyword is not blank, find the keyword in the whole of the description
if keyword:
act = act.filter(description__icontains=keyword)
# if has keyword request from the url
if 'demographics' in request.GET:
demographics = request.GET['demographics']
# check if keyword is not blank, find the keyword in the whole of the description
if demographics:
act = act.filter(demographics__iexact=demographics)
if 'defaultgenre' in request.GET:
defaultgenre = request.GET['defaultgenre']
# check if keyword is not blank, find the keyword in the whole of the description
if defaultgenre:
act = act.filter(defaultgenre__iexact=defaultgenre)act / models.py
from django.db import models
from django.db.models import CharField
from django.utils import timezone
from ckeditor.fields import RichTextField
from multiselectfield import MultiSelectField
# Create your models here.
class Act(models.Model):
artists_name = models.CharField(max_length=255)
description = RichTextField(blank=True)
call_to_action = models.CharField(max_length=255)
artists_photo = models.ImageField(upload_to='photo/%y/%m/%d/')
act_page_title = models.CharField(max_length=255)
act_page_description = models.CharField(max_length=255)
act_page_keywords = models.CharField(max_length=255)
created_date = models.DateTimeField(auto_now_add=True)
defaultgenre_choices = [
('Adult Contemporary','Adult Contemporary'),
('Classic Rock','Classic Rock'),
('Country Music','Country Music'),
('Disco & Funk','Disco & Funk'),
('Trap Music', 'Trap Music'),
('Folk Music', 'Folk Music'),
('Singer / Songwriter', 'Singer / Songwriter'),
('Latin Music', 'Latin Music'),
]
defaultgenre = models.CharField(
choices= defaultgenre_choices,
max_length= 100,)
decades_choices = [
(1,'1950s'),
(2,'1960s'),
(3,'1970s'),
(4,'1980s'),
(5,'1990s'),
(6,'2000s'),
(7,'2010s'),
(8,'2020s'),
]
decade = MultiSelectField(max_length=100,
choices= decades_choices,)
def __str__(self):
return self.artists_namehome.html
<div class="search-box-4 sb-8">
<form action="{% url 'search' %}" method="">
<div class="form-group">
<input type="text" name="keyword" placeholder="Search by name" class="form-control">
</div>
<div class="form-group">
<select class="form-control search-fields" name="demographics">
<option selected="true" disabled="disabled">Demographics</option>
{% for demographics in demographics_search %}
<option value= "{{demographics}}">{{demographics}}</option>
{% endfor %}
</select>
</div>
<div class="form-group">
<select class="form-control search-fields" name="defaultgenre">
<option selected="true" disabled="disabled">Default Genres</option>
{% for defaultgenre in defaultgenre_search %}
<option value= "{{defaultgenre}}">{{defaultgenre}}</option>
{% endfor %}
</select>
</div>
<div class="form-group">
<select class="form-control search-fields" name="decade">
<option selected="true" disabled="disabled">Decade</option>
{% for decade in decade_search %}
<option value= "{{decade}}">{{decade}}</option>
{% endfor %}
</select>
</div>不使用多选择函数

没有多选择域的工作

发布于 2021-01-30 22:07:39
根据你的decades_choices
decades_choices = (1,‘1950’),(2,‘1960’),(3,‘1970年代’),(4,‘1980年代’),(5,‘1990年代’),(6,‘2000年代’),(7,‘2010年代’),(8,‘2020年代’),
我想你的价值观是这样的:
<div class="form-group">
<select class="form-control search-fields" name="decade">
<option selected="true" disabled="disabled">Decade</option>
<option value="7, 8">2010s, 2020s</option>
<option value="8">2020s</option>
</select>
</div>那么,要按十年进行过滤,就必须这样做:
decade = request.GET.get("decade")
if decade:
# convert string to list
decade = decade.split(",")
act = act.filter(decade=decade)https://stackoverflow.com/questions/65971586
复制相似问题