与数据库相关的 Django DISTINCT 问题



在我的数据库中,我有一个 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有一个摘要和患者值。

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

DISTINCT ON fields is not supported by this database backend

你可以使用 .values(( 而不是 .values_list((,如下所示:

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

values(( 返回字典(或类似的东西(,在你的模板中你可以得到你写的。

最新更新