Python 使用下拉列表使用django筛选器筛选django-tables2表
我有一个模型(简介),我正在Django-tables2列表中显示。一个简报可以属于一个或多个塔。我正在尝试创建一个视图,用户可以在其中查看所有简报,然后过滤以查找与特定塔相关的简报。我第一次使用复选框实现了这个功能,它正在工作,但我需要将该过滤器放入下拉列表中 “GET/brief/?towers=HTTP/1.1”-提供了所有的简介。 “GET/brief/?towers=1http/1.1”-给出了一个空的摘要列表。(应该在测试数据中给我2个) 在django shell中查询可以得到预期的结果 另一个奇怪的行为是,我的下拉列表中有可以选择的空格Python 使用下拉列表使用django筛选器筛选django-tables2表,python,django,django-tables2,django-filters,Python,Django,Django Tables2,Django Filters,我有一个模型(简介),我正在Django-tables2列表中显示。一个简报可以属于一个或多个塔。我正在尝试创建一个视图,用户可以在其中查看所有简报,然后过滤以查找与特定塔相关的简报。我第一次使用复选框实现了这个功能,它正在工作,但我需要将该过滤器放入下拉列表中 “GET/brief/?towers=HTTP/1.1”-提供了所有的简介。 “GET/brief/?towers=1http/1.1”-给出了一个空的摘要列表。(应该在测试数据中给我2个) 在django shell中查询可以得到预期
class Attribute(models.Model):
class Meta:
abstract = True
ordering = ['name']
name = models.CharField(max_length=100, unique=True)
created_on = models.DateTimeField(auto_now_add=True)
created_by = models.ForeignKey(User, related_name='%
(class)s_created_by', null=True, blank=True,
on_delete=models.SET_NULL)
modified_dt = models.DateTimeField(auto_now=True)
modified_by = models.ForeignKey(User, related_name='%
(class)s_modified_by', null=True, blank=True,
on_delete=models.SET_NULL)
def __str__(self):
return self.name
class Tower(Attribute):
pass
class Brief (Attribute):
link = models.URLField()
sources = models.ManyToManyField(SourceSystem)
format = models.ForeignKey(ReportFormat, on_delete=models.PROTECT)
towers = models.ManyToManyField(Tower)
type = models.ForeignKey(ReportType, on_delete=models.PROTECT)
project = models.ForeignKey(Project, on_delete=models.PROTECT)
def tower_list(self):
return ", ".join([str(obj) for obj in self.towers.all()])
def source_list(self):
return ", ".join([str(obj) for obj in self.sources.all()])
My tables.py:
class BriefTable(tables.Table):
name = tables.LinkColumn('brief_detail', args=[A('pk')])
class Meta:
model = Brief
template_name = 'django_tables2/bootstrap.html'
sequence = ('id', 'name', 'type', 'project', 'format',)
exclude = ('link', 'created_on', 'created_by', 'modified_dt', 'modified_by', 'info')
我的过滤器.py
class BriefFilter(django_filters.FilterSet):
towers=django_filters.ModelMultipleChoiceFilter(
queryset=Tower.objects.all(), widget=forms.Select)
class Meta:
model = Brief
fields = ['towers']
我的看法是:
class FilteredBriefListView(LoginRequiredMixin, SingleTableMixin,
FilterView):
table_class = BriefTable
template_name = 'brief/brief_list.html'
paginate_by = 20
filterset_class = BriefFilter
最后,我的路线:
urlpatterns = [
path('', FilteredBriefListView.as_view(), name="home"),
]
稍作休息后,我意识到我使用的是ModelMultipleEchoiceFilter,而不是ModelChoiceFilter/脸掌