【问题标题】:ValueError at /category/sugar/ Field 'id' expected a number but got 'sugar'/category/sugar/ 字段 'id' 的 ValueError 需要一个数字,但得到了 'sugar'
【发布时间】:2020-07-08 06:28:16
【问题描述】:

我正在尝试为电子商务创建类别

urlpatterns = [

    path('category/<cats>/', views.categoryView , name = 'category')
]

views.py:

def categoryView(request, cats):
    products_category = Product.objects.filter(category=cats)
    return render(request, 'store/categories.html', {'cats': cats.title(), 'products_category': products_category})

models.py

class Category(models.Model):
    name = models.CharField(max_length=100)
    image = models.FileField(null=True, blank=True)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('index')

    @property
    def imageURL(self):
        try:
            url = self.image.url
        except:
            url = ''
        return url


class Product(models.Model):
    name = models.CharField(max_length=200)
    slug = models.SlugField(max_length=40, unique=True)
    price = models.FloatField()
    discount = models.FloatField(blank=True, null=True)
    digital = models.BooleanField(default=False, null=True, blank=True)
    category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='category')
    featured = models.BooleanField(default=False, null=True, blank=True)
    new = models.BooleanField(default=False, null=True, blank=True)
    image = models.ImageField(null=True, blank=True)

    def __str__(self):
        return self.name

    @property
    def imageURL(self):
        try:
            url = self.image.url
        except:
            url = ''
        return url

html

{% for product in products_category %}
<div class="col-lg-3 col-md-6">
<div class="product-item mb-30">
<a href="#" class="product-img">
<img src="{{ product.imageURL}}" alt="">
<div class="product-absolute-options">
<span class="offer-badge-1">6% off</span>
<span class="like-icon" title="wishlist"></span>
</div>
</a>
</div>
</div>
{% endfor %}

当我尝试将类别名称添加到我的 URL 时出现此错误,如果我在 URL 中写下这样的类别 ID >>http://127.0.0.1:8000/category/3/ 我得到了正确的页面,如果我单击类别,则会在 / 处收到此消息 ValueError类别/糖/ 字段 'id' 需要一个数字,但得到了 'sugar'。

【问题讨论】:

    标签: django django-models django-views


    【解决方案1】:

    在网址中

    path('category/<str:cats>/', views.categoryView , name='category')
    

    在views.py中

    products_category = Product.objects.filter(category__name=cats)
    

    这里的 category__name 是双“_”

    试试看。

    【讨论】:

    • 谢谢零,你救了我。它现在运行良好
    【解决方案2】:

    如果你想在你的 url 中有一个字符串,你需要执行以下操作:

    path('category/<str:name>/', views.categoryView , name = 'category')
    

    请参阅 Django 文档:

    https://docs.djangoproject.com/en/3.0/topics/http/urls/

    【讨论】:

    • 当我输入 str 时,我得到了带有此错误的正确 URL 字段 'id' 需要一个数字,但得到了 'sugar'。
    • 我不明白cats.title 来自哪里,因为我在您的代码中的任何地方都看不到title。我认为这可能是您的错误所在。
    • 我在这里删除了它,同样的问题(cats.title() 使第一个字母大写
    猜你喜欢
    • 2021-05-04
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 2020-08-26
    • 1970-01-01
    • 2021-08-31
    相关资源
    最近更新 更多