Django DISTINCT与数据库有关的问题

时间:2018-05-24 16:14:09

标签: django

在我的数据库中,我有一个100的report_id,但它有两个与report_id无关的部分,与我的应用程序无关。我可以在下面的例子中使用.distinct()。这在某一点上很有效。

在下面的示例中,我的数据在我的表单中正确返回,但是我需要使用第一个示例中不存在的ID来发布数据。

reportaccess = QvReportList.objects.filter(report_id__in= reportIds).values_list('report_name_sc', flat = True).distinct()

我必须将查询集更改为以下内容,以允许report_id POST到下一个视图。

currreportaccess = QvReportList.objects.filter(report_id__in= reportIds).distinct()

我的问题是因为我不再将values_list与单个字段作为平面。它以两行的形式回归。

我的HTML定义如下:

{% for app in currreportaccess %}

              <li> <input type="checkbox" name="current_report" value ="{{app.report_id}}" >  {{ app.report_name_sc }}</li>

          {% endfor %}

在这种情况下是否有可能获得明显的结果?如果是这样,我应该怎么做呢?

我已经为表QVReportList添加了我的模型。

class QvReportList(models.Model):
    qv_dept_id = models.CharField(db_column='QV_Dept_ID', max_length=100)  # Field name made lowercase.
    report_id = models.CharField(db_column='Report_ID',primary_key=True, max_length = 100, serialize=False)  # Field name made lowercase.
    report_name = models.CharField(db_column='Report_Name', max_length=255, blank=True, null=True)  # Field name made lowercase.
    report_name_sc = models.CharField(db_column='Report_Name_SC', max_length=255, blank=True, null=True)  # Field name made lowercase.
    qv_filename = models.CharField(db_column='QV_FileName', max_length=255, blank=True, null=True)  # Field name made lowercase.
    report_access = models.CharField(db_column='Report_Access', max_length=20, blank=True, null=True)  # Field name made lowercase.
    report_group_id = models.IntegerField(db_column='Report_Group_ID', blank=True, null=True)  # Field name made lowercase.
    report_sub_group_id = models.IntegerField(db_column='Report_Sub_Group_ID', blank=True, null=True)  # Field name made lowercase.
    load_date = models.DateTimeField(db_column='Load_Date', blank=True, null=True)  # Field name made lowercase.
    approver_fname = models.CharField(db_column='Approver_FName', max_length=255, blank=True, null=True)  # Field name made lowercase.
    approver_lname = models.CharField(db_column='Approver_LName', max_length=255, blank=True, null=True)  # Field name made lowercase.
    approver_ntname = models.CharField(db_column='Approver_NTName', max_length=255, blank=True, null=True)  # Field name made lowercase.
    beg_date = models.DateTimeField(db_column='Beg_Date', blank=True, null=True)  # Field name made lowercase.
    end_date = models.DateTimeField(db_column='End_Date', blank=True, null=True)  # Field name made lowercase.
    active = models.IntegerField(db_column='Active', blank=True, null=True)  # Field name made lowercase.
    approval_id = models.IntegerField(db_column='Approval_ID', blank=True, null=True)  # Field name made lowercase.
    role_based_id = models.IntegerField(db_column='Role_Based_ID', blank=True, null=True)  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = 'QV_Report_List'

问题在于报告ID为100的字段report_access,report_access有一个SUMMARY和Patient值。

我不能只在字段名称上调用distinct,因为我需要使用SQL服务器而不能切换到posgress。我收到以下错误消息。

DISTINCT ON fields is not supported by this database backend

1 个答案:

答案 0 :(得分:1)

你可以使用.values()的.values(),如下所示:

QvReportList.objects.filter(
    report_id__in= reportIds
).values('report_id', 'report_name_sc'
).distinct()

values()返回dict(或类似的东西),在你的模板中,你可以像写完一样。