模型(django)中主键的默认数据类型,当前路径,url '/app' 与这些中的任何一个都不匹配

default data type of primary keys in models (django), The current path, url '/app' didn't match any of these

据我所知,在Django中,id的默认数据类型是整数。

例如,如果我的 models.py 文件中有这样一个模型,Django 会为它的每个实例设置一个 id(主键),Django 会自动递增它,例如 1、2、3 等:

class AuctionListing(models.Model):
name = models.CharField(max_length=200)
url = models.URLField()


def __str__(self):
    return f"{self.name}"

由于它自动将 id(primary key) 设置为整数数据类型,我可以在 url.py 文件中创建这样一个 url :

    path("<int:listing_id>", views.listing, name="listing")

还有我的 views.py 文件:

def index(request):
    return render(request, "auctions/index.html", {"auctionList":AuctionListing.objects.all()} )

另外,index.html 文件:

{% for listing in auctionList %}
    <a href="url 'listing' listing.id"><img src = "{{listing.url}}" alt = "{{listing.name}}"></a>
{% endfor %}

这个问题,当它将 listing.id 传递给路径("int:listing_id", views.listing, name = "listing")时,它不会传递 id 作为整数但作为海峡。这就是为什么路径不接受它,因为它是 int:listing_id,当我转到该页面时,它给了我这个错误:“

当前路径,url 'listing' listing.id,与这些路径都不匹配。

当我将 int:listing_id 更改为 str:listing_id 时,它起作用了。请问在Django中id的默认数据类型是不是字符串数据类型?据我所知应该是整型数据类型。有人可以解释一下吗?

顺便说一句,我继承自AbstractUser。 数据库是sqlite3

是的,django 中默认的对象主键数据类型是 int,但如果你想访问它,你应该声明自己的主键字段或使用默认名称 pk,在这种情况下您的网址应如下所示:

path("", views.listings, name="listings"),
path("<int:pk>", views.listing, name="listing")

你的观点是这样的:

def index(request):
    listings = AuctionListing.objects.all()
    return render(request, 'listings.html', {'listings': listings'}

def listing(request, pk):
    listing = AuctionListing.objects.get(pk=pk)
    return render(request, 'listing.html', {'listing': listing'}

在你的 listings.html:

{% for listing in listings %}
    <a href="{% url 'listing' listing.pk %}">{{ listing.name }}</a>
{% endfor %}