RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1097003
Accepted
Artyom Lazovikov
Artyom Lazovikov
Asked:2020-03-20 03:20:18 +0000 UTC2020-03-20 03:20:18 +0000 UTC 2020-03-20 03:20:18 +0000 UTC

字段 'id' 需要一个数字,但得到了 'slug'

  • 772

实施重击时出错,在什么方面-我不明白

追溯

Traceback (most recent call last):
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/fields/__init__.py", line 1772, in get_prep_value
    return int(value)
ValueError: invalid literal for int() with base 10: 'bytovaya-tehnika'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/views/generic/base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/rest_framework/views.py", line 505, in dispatch
    response = self.handle_exception(exc)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/rest_framework/views.py", line 465, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/rest_framework/views.py", line 476, in raise_uncaught_exception
    raise exc
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/rest_framework/views.py", line 502, in dispatch
    response = handler(request, *args, **kwargs)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/rest_framework/generics.py", line 199, in get
    return self.list(request, *args, **kwargs)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/rest_framework/mixins.py", line 38, in list
    queryset = self.filter_queryset(self.get_queryset())
  File "/home/artyomlazovikov/internet_shop/e_shop/products/views.py", line 37, in get_queryset
    queryset = Product.objects.filter(category=category)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/query.py", line 904, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/query.py", line 923, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/sql/query.py", line 1350, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/sql/query.py", line 1381, in _add_q
    check_filterable=check_filterable,
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/sql/query.py", line 1311, in build_filter
    condition = self.build_lookup(lookups, col, value)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/sql/query.py", line 1165, in build_lookup
    lookup = lookup_class(lhs, rhs)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/lookups.py", line 22, in __init__
    self.rhs = self.get_prep_lookup()
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/fields/related_lookups.py", line 115, in get_prep_lookup
    self.rhs = target_field.get_prep_value(self.rhs)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/fields/__init__.py", line 1776, in get_prep_value
    ) from e
ValueError: Field 'id' expected a number but got 'bytovaya-tehnika'.

模型产品,类别。M2M 关系。

class Category(models.Model):
    name = models.CharField(max_length=255)
    slug = models.SlugField(max_length=255, db_index=True)
    parental_category = models.ManyToManyField('self', 
                                                blank=True,
                                                verbose_name='Категория-родитель',
                                                )


    def __str__(self):
        return self.name
class Product(models.Model):
    name = models.CharField(max_length=150, db_index=True,
                            verbose_name='Название')
    slug = models.SlugField(max_length=150, db_index=True)
    category = models.ForeignKey(Category, 
                                 related_name='category',
                                 null=True,
                                 blank=True,
                                 verbose_name='Категория',
                                 on_delete=models.SET_NULL,
                                 )

    def __str__(self):
        return self.name

序列化器

class ProductSerializer(serializers.ModelSerializer):
    category = CategorySerializer(many=True, read_only=True)

    class Meta:
        model = Product
        fields = ['id','name','slug',
                  'category']

class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = ['name', 'parental_category']

意见

class ProductList(ListAPIView):
    serializer_class = ProductSerializer

    def get_queryset(self):
        queryset = Product.objects.all()
        category = self.kwargs['category_slug']
        if category is not None:
            queryset = Product.objects.filter(category=category)
        return queryset

python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Lothric
    2020-03-20T11:25:21Z2020-03-20T11:25:21Z

    您从请求中获取一个值slug,并尝试使用该值过滤外键字段设置的查询,并且在外键中有一个通过 id 的链接。因此,在过滤 Product 模型之前,您需要找到所需 Category 对象的 id,或者不更改任何内容,而是指定过滤器搜索字段slug:

           if category is not None:
                # обратите внимание, там двойное подчёркивание
                queryset = Product.objects.filter(category__slug=category)
    
    • 1

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5