Идентификатор, по-видимому, отсутствует в модели django: поэтому обратного соответствия не найдено - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть модель django, для которой я пишу свой вид удаления. Я получаю ошибку django.urls.exceptions.NoReverseMatch. Это также логично, поскольку, когда я пытаюсь выполнить отладку и хочу вывести свой идентификатор с {{ model.id }}, мое представление не показывает мне никакого идентификатора вообще. Когда я использую pk, он передается в моих URL.

Моя модель:

class UrlTrack(models.Model):
    url = models.CharField(max_length=255, primary_key=True)
    counter = models.BigIntegerField(default=0)

Мой взгляд:

class AnalyticsDeleteUrls(SingleObjectMixin, View):
    model = UrlTrack

    def get(self, request, *args, **kwargs):
        obj = self.get_object()
        if obj is not None:
            obj.delete()
            return redirect('list_history')

Мои URL:

    path('history/delete/urls/<int:id>/', AnalyticsDeleteUrls.as_view(), name="history_url"),

Мой шаблон:

  {% for item in url_tracks %}
            <tr>
              <td>{{ item.url }}</td>
              <td>{{ item.counter }}</td>
              <td> <a class="btn btn-danger" href="{% url 'history_url' item.id %}"> Delete </a>
              </tr>
   {% endfor %}

Вот также мой список:

class AnalyticsIndexView(StaffRequiredMixin, ListView):
  template_name = 'analytics_list.html'
  model = UrlTrack
  context_object_name = 'url_tracks'
  queryset = UrlTrack.objects.all()

  def get_context_data(self, **kwargs):
    context = super(AnalyticsIndexView, self).get_context_data(**kwargs)
    context['object_viewed_list'] = ObjectViewed.objects.all()
    return context

Почему идентификатор не существует? Я думаю, что Django передает это автоматически ....?

Любая помощь высоко ценится. Заранее спасибо

1 Ответ

1 голос
/ 22 апреля 2019

Я думаю, вам действительно нужно сделать это в два этапа.

Сначала добавьте id к модели, затем отредактируйте созданный файл makemigrations.Вы можете попробовать изменить файл миграции следующим образом:

from __future__ import unicode_literals

from django.db import migrations, models

def set_id(apps, schema_editor):
    UrlTrack = apps.get_model('app_name', 'urltrack')
    count = 1
    for row in UrlTrack.objects.all():
        row.id = count
        count += 1
        row.save()

class Migration(migrations.Migration):

    dependencies = [
        ('app_name', '0001_previous_migration_name'),
    ]

    operations = [
        migrations.AddField(
            model_name='urltrack',
            name='id',
            field=models.IntegerField(),
        ),
        migrations.RunPython(set_id),
    ]

Затем снова отредактируйте файл models.py, сделайте UrlTrack уникальным и id первичным и выполните makemigrations снова

...