1

视图.py

def search(request):
    """"""" 
    if 'search' in request.POST:
                search_keyword = request.POST.get('search_keyword')
                reports = reports.filter(Q(incident_description__icontains=search_keyword) | Q(incident_number__icontains=search_keyword) | Q(reportperson__name__icontains=search_keyword))    
    """""""
    return render(request,'search.html',{'searchform':searchform})

模型.py

class Report(models.Model):
    user = models.ForeignKey(User, null=False)
    incident_number = models.CharField('Incident Number', max_length=100)
    incident_description = models.TextField('Incident description', null=True, blank=True)

class ReportPerson(models.Model):
    report = models.ForeignKey(Report)
    action_type = models.CharField(max_length=100, choices=ACTION_TYPE)
    name = models.CharField('Name', max_length=100)

以上视图从 Report 模型和 Reportperson 模型中执行关键字搜索(搜索模型字段中的数据)。

存储在报告模型中的报告可以有 2 个以上的报告人详细信息。

在数据库中,值将是这样的,

如果报告表和报告人表中的值如图所示,报告模型是

报告模型

报告人模型是

报告人模型

在这里,一个报告有两个报告人详细信息。如果我用这个案例执行搜索,相同的报告会显示两次。根据报告人详细信息的数量,显示相同报告的次数会不断变化。

我想知道如何处理这个问题,这是因为我正在使用 Reportperson 表中的名称搜索。问题正在由此发生report=reports.filter(....| Q(reportperson__name__icontains=search_keyword)),需要帮助。

4

1 回答 1

2

SELECT DISTINCT 怎么样?(见https://docs.djangoproject.com/en/dev/ref/models/querysets/#distinct

于 2013-07-19T14:12:29.870 回答