Python 字段';id';应为一个数字,但得到';投标';
我正在从一个模型构建一个html页面。添加到页面的是一个表单,它似乎干扰了我用来构建页面的模型 我收到以下错误消息: 异常类型:ValueError at/bidding 异常值:字段“id”需要一个数字,但得到了“bidding” HTML(listing.HTML) models.pyPython 字段';id';应为一个数字,但得到';投标';,python,html,django,forms,Python,Html,Django,Forms,我正在从一个模型构建一个html页面。添加到页面的是一个表单,它似乎干扰了我用来构建页面的模型 我收到以下错误消息: 异常类型:ValueError at/bidding 异常值:字段“id”需要一个数字,但得到了“bidding” HTML(listing.HTML) models.py class Listing(models.Model): CATEGORIES = ( ('fashion','fashion'), ('electronics','e
class Listing(models.Model):
CATEGORIES = (
('fashion','fashion'),
('electronics','electronics'),
('sports','sports'),
('home','home'),
('motors','motors'),
('art','art'),
('business','business'),
('media','media'),
('others','others')
)
listingPoster = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="Poster")
listingName = models.CharField(max_length=128, verbose_name="Auction item")
listingDesc = models.TextField(blank=True, verbose_name="Item description")
listingActive = models.BooleanField(default=True, verbose_name="Active listing")
listingImage = models.URLField(blank=True, verbose_name="Link to image")
listingCategory = models.CharField(max_length=64, choices=CATEGORIES, default='others', verbose_name="Category")
listingFirstBid = models.DecimalField(max_digits=8, decimal_places=2, default=1.0, verbose_name="Starting bid")
listingCreated = models.DateTimeField(auto_now_add=True, null=True)
watchers = models.ManyToManyField(User, blank=True, related_name="watchedListings", verbose_name="Watchers")
### requires the Pillow library to be installed
def __str__(self):
return f"{self.listingPoster} {self.listingName} {self.listingCategory} {self.listingActive}"
url.py
urlpatterns = [
path("<str:listing>", views.listing, name="listing"),
path("bidding", views.bidding, name="bidding")
]
urlpatterns=[
路径(“,views.listing,name=“listing”),
路径(“投标”,views.bidding,name=“投标”)
]
您应该交换模式,这样,如果您访问竞价
,则它将首先查看竞价
视图的路径,并且仅当路径不匹配时才进一步查看,因此:
urlpatterns = [
# ↓ first bidding
path('bidding/', views.bidding, name='bidding'),
path('<str:listing>/', views.listing, name='listing'),
]
此view函数接受第二个参数,该参数由URL提供:
路径(“,views.listing,name=“listing”)
在这个路径中,您声明URL返回变量listing
,该变量被声明为一个字符串,并返回给视图函数。因此,当在数据库上运行筛选函数时,参数id
将获得一个由变量listing
urlpatterns=[
urlpatterns = [
path("<str:listing>", views.listing, name="listing"),//This line is the culprit
path("bidding", views.bidding, name="bidding")
]
path(“,views.listing,name=“listing”),//这一行是罪魁祸首
路径(“投标”,views.bidding,name=“投标”)
]
将第一个路径更改为如下所示,这将强制输入为整数
path("<int:listing>", views.listing, name="listing")
path(“,views.listing,name=“listing”)
您是从哪里得到错误的?哪一行?别让我们猜,这是让我困惑的事情之一。错误消息中没有行。这是回溯:威廉有正确的答案。我是在他发帖后不久发现的。
urlpatterns = [
path('bidding/', views.bidding, name='bidding'),
# ↓ int path converter
path('<int:listing>/', views.listing, name='listing'),
]
def listing(request, listing):
return render(request, "auctions/listing.html",{
"listing" : Listing.objects.filter(id=listing)
})
urlpatterns = [
path("<str:listing>", views.listing, name="listing"),//This line is the culprit
path("bidding", views.bidding, name="bidding")
]
path("<int:listing>", views.listing, name="listing")