我正在尝试创建一个简单的应用程序以显示数据库记录列表。所述数据通过csvimport从csv批量加载。我正在加载的csv文件具有数千条记录,但是对于此测试,只有一列(municipio,它表示 city ),所有这些列都具有相同的值。
在我用于测试的索引视图中,我想显示已加载(不同)城市的数量,然后显示所述城市的列表。
这是我的观点。py
def index(request):
num_municipios = DireccionEnCobertura.objects.values_list('municipio').distinct().count()
municipios = DireccionEnCobertura.objects.values('municipio').distinct()
return (render (request, 'index.html', context={'num_municipios':num_municipios, 'municipios':municipios}))
这是在我的index.html中
<ul>
<li><strong>Municipios:</strong> {{ num_municipios }}</li>
</ul>
<table>
<thead>
<td>Municipios Incluidos</td>
</thead>
<tbody>
{% for municipio in municipios.distinct() %}
<tr>
<td>{{ municipio.municipio }}</td>
</tr>
{% endfor %}
</tbody>
</table>
这是模型
class DireccionEnCobertura(models.Model):
gescal17 = models.CharField(max_length=17, help_text="")
municipio = models.CharField(max_length=50, help_text="")
tipo_via = models.CharField(max_length=50, help_text="")
nombre_via = models.CharField(max_length=200, help_text="")
numero = models.CharField( max_length=5, help_text="", null=True)
cod_postal = models.CharField( max_length=5, help_text="")
uuii = models.CharField( max_length=5, help_text="", null=True)
class Meta:
ordering = ["tipo_via", "nombre_via", "numero"]
def __str__(self):
return self.municipio + " " + self.tipo_via + " " + self.nombre_via + " " + str( self.numero )
def googleMapsLink(self):
link = "https://www.google.com/maps/search/?api=1&query="
return link + self.tipo_via.replace(" ", "%20") + "%20" + self.nombre_via.replace(" ", "%20") + "%2C" + str( self.numero ) + "%2C" + self.cod_postal + "%2C" + self.municipio
为清楚起见,“市政”字段是我称为“城市”的字段。
我已经上下检查了csv文件,已经将值从第一个单元格复制到了列的其余部分,以确保没有隐藏的字符使其与众不同,但是我仍然得到< / p>
num_municipios = 1
(正确),但是
在慕尼黑市中的慕尼黑市
显示成百上千个相同的东西。
我在做什么错了?
答案 0 :(得分:1)
问题是您有默认的ordering
。来自the documentation for distinct()
:
如果您使用
values()
查询来限制所选的列,则任何order_by()
(或默认模型排序)中使用的列仍会涉及到,并可能影响结果的唯一性。
由于您不关心为此目的的顺序,因此只需remove the ordering。
如果您不希望对查询应用任何排序,甚至不希望使用默认排序,请不带任何参数调用
order_by()
。
像这样:
municipios = DireccionEnCobertura.objects.order_by().values('municipio').distinct()