Я использую Different () правильно? - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь создать простое приложение для отображения списка записей базы данных.Указанные данные загружаются оптом из csv с помощью csvimport.Файл CSV, который я загружаю, содержит несколько тысяч записей, но для этого теста есть один столбец (municipio, это означает city ), который имеет одинаковое значение для всех них.

Inиндексное представление, которое я использую для тестов, я хочу отобразить количество загруженных (разных) городов, а затем список упомянутых городов.

Это в моих views.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

поле "municipio" это то, которое я назвал "city" для ясностиради.

Я проверил файл csv вверх и вниз, я скопировал значение из первой ячейки в остальную часть столбца, чтобы убедиться, что не было какого-то скрытого символа, делающего его каким-то другим,но я все еще получаю

num_municipios = 1

(что правильно), но

для municipio в муниципалитетах

показывает сотни и сотни одинаковых.

Что я делаю не так?

1 Ответ

0 голосов
/ 03 октября 2018

Проблема в том, что у вас есть значение по умолчанию ordering.Из документации для distinct():

Если вы используете запрос values(), чтобы ограничить выбранные столбцы, столбцы используются в любом order_by() (или порядке модели по умолчанию).) будет по-прежнему участвовать и может повлиять на уникальность результатов.

Поскольку для этой цели вас не волнует заказ, просто удалите порядок .

Если вы не хотите, чтобы к запросу применялся какой-либо порядок, даже порядок по умолчанию, позвоните order_by() без параметров.

Примерно так:

municipios = DireccionEnCobertura.objects.order_by().values('municipio').distinct()
...