id在django模型中似乎不存在:这就是为什么找不到反向匹配的原因

Id seems to be not existent in django model: that's why no reverse match is found

我有一个 Django 模型,我正在为其编写删除视图。我收到 django.urls.exceptions.NoReverseMatch 错误。这也是合乎逻辑的,因为当我尝试调试并且我想用 {{ model.id }} 输出我的 id 时,我的视图显示我根本没有 id。当我使用 pk 时,它会传入我的网址。

我的模特:

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')

我的网址:

    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

为什么id不存在?我虽然 django 自动传递了它......?

非常感谢任何帮助。提前致谢

我认为您实际上需要分两步完成。

首先,将 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 再次