我想为Dashboard这个页面新增一个搜索功能,
如图所示,我现在已经实现了通过查找port的名字,并返回所有带有这个名字的port的文档。
而Port这个类和UtilisateurService用户服务机构这个类是多对多的关系,一个用户服务机构可以与多个Port相关联,他们之间是用port_set相连接,
我现在想通过搜索UtilisateurService中的nom_service也就是用户服务机构的名称,返回对应的多个Port相关联的所有文档,请问这该如何实现?
models.py
class OperationDragage(models.Model):
STATUT_VALIDATION_CHOICES = (
('Saisie en cours', 'Saisie en cours'),
('Soumise - attente validation', 'Soumise - attente validation'),
('Validée Cerema', 'Validée Cerema')
)
id_operation = models.CharField(_('id opération dragage'), max_length=100, null=True, blank=True)
annee_record_number = models.IntegerField(_('Numéro identification année'), null=True, blank=True)
imported = models.BooleanField(_('Importé'), default=False)
annee = models.IntegerField(_('année'))
drag_vol = models.FloatField(_('Entrer le volume dragué sur la zh (x1000 m3)'), max_length=100, null=True, blank=True)
drag_qms_decl = models.FloatField(_('Entrer la QMS totale draguée sur la zh (x1000m3)'), max_length=100, null=True, blank=True)
drag_qms_calc = models.FloatField(_('QMS calculée par le CEREMA'), max_length=100, null=True, blank=True)
statut_validation = models.CharField(
_('statut de validation'),
max_length=100,
choices=STATUT_VALIDATION_CHOICES,
default=STATUT_VALIDATION_CHOICES[0][0],
blank=True,
null=True
)
zh_drag = models.ForeignKey(
ZHDrag,
on_delete=models.SET_NULL,
null=True,
blank=True,
verbose_name=_('zh drag')
)
def __str__(self):
return self.id_operation
class UtilisateurService(models.Model):
nom_service = models.CharField(_('nom du service'), max_length=100)
courriel_service = models.EmailField(_('courriel du service'), blank=True, null=True)
departement_set = models.ManyToManyField(Departement)
port_set = models.ManyToManyField(Port)
user_set = models.ManyToManyField(User)
def __str__(self):
return self.nom_service
filter.py
class DashboardFilter(FilterSet):
custom_filter = django_filters.CharFilter(method='_custom_filter', label='Filtrer (id opération, ZHD, port, commune)')
annee = django_filters.NumberFilter()
statut_validation = django_filters.ChoiceFilter(choices=OperationDragage.STATUT_VALIDATION_CHOICES)
def _custom_filter(self, queryset, name, value):
return queryset.filter(
Q(id_operation__icontains=value) |
Q(zh_drag__zhd_nom__icontains=value) |
Q(zh_drag__port__port__icontains=value) |
Q(zh_drag__port__commune__nom__icontains=value)
)
class Meta:
model = OperationDragage
fields = ()
tables.py
class UtilisateurServiceTable(tables.Table):
edit = EditImageColumn('utilisateur-service-update', args=[A('pk')], orderable=False, empty_values=())
class Meta:
model = UtilisateurService
fields = ('nom_service', 'courriel_service', 'edit')
sequence = fields
per_page = 20
attrs = {'class': 'table table-bordered table-striped'}
class DashboardTable(tables.Table):
edit = EditImageColumn('operation-dragage-update', args=[A('pk')], orderable=False, empty_values=())
class Meta:
model = OperationDragage
fields = ('id_operation', 'zh_drag', 'zh_drag__port', 'zh_drag__port__commune', 'statut_validation', 'edit')
sequence = fields
per_page = 20
attrs = {'class': 'table table-bordered table-striped'}
html
{% extends "layouts/base.html" %}
{% load i18n core_tags %}
{% block title %}
{# Translators: Operation dragage head title #}
{% trans "Operation dragage list" %}
{% endblock %}
{% block content %}
{# Translators: Operation dragage list title #}
{% trans "Operation dragage list" as title %}
{% show_header_title title %}
<!-- Main content -->
<section class="content">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<div class="card card-primary">
<div class="card-header">
{# Translators: Operation dragage title #}
<h3 class="card-title">{% trans "Operation dragage list" %}</h3>
</div>
<div class="card-body">
<div class="row">
<div class="col-3">{% trans "Port" %}</div>
<div class="col-3">{{ zh_drag.port }}</div>
<div class="col-3">{% trans "Commune" %}</div>
<div class="col-3">{{ zh_drag.port.commune }}</div>
</div>
<div class="row">
<div class="col-3">{% trans "ZH drag" %}</div>
<div class="col-9">{{ zh_drag }}</div>
</div>
{# Translators: Operation dragage create button #}
<a class="btn btn-primary" href="{% url "operation-dragage-create" %}">{% trans "Create" %}</a>
{% include "table.html" with table=table %}
{% if not table.data %}
{# Translators: Operation dragage list any operation dragage #}
<p>{% trans "Any operation dragage" %}</p>
{% endif %}
</div>
</div>
</div>
</div>
</section>
{% endblock %}
这个确实好像可以用前端就能实现,学python的时候我只是对filter有所耳闻,希望能帮到你
Django中可以利用filter与simple_tag为前端自定义函数来实现
详见这篇文章https://www.bbsmax.com/A/gVdnqbPE5W/
望采纳啦谢谢
直接参考官网示例
https://django-filter.readthedocs.io/en/stable/
可以参考一下,希望对你有帮助!
https://wenku.baidu.com/view/63fa189df221dd36a32d7375a417866fb94ac050.html
这个是不是前端能实现?为啥要用后端写