【问题标题】:Field 'doors' expected a number but got ''字段“门”需要一个数字,但得到了“”
【发布时间】:2021-07-20 15:09:19
【问题描述】:

错误:


Traceback (most recent call last):

The above exception (invalid literal for int() with base 10: '') was the direct cause of the following exception:
  File "/home/andres/.local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/home/andres/.local/lib/python3.6/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "./wallacar_app/views.py", line 124, in getDoors
    doors = Coche.objects.exclude(doors__isnull=True).exclude(doors__exact='').order_by('doors').values_list('doors').distinct()
  File "/home/andres/.local/lib/python3.6/site-packages/django/db/models/query.py", line 949, in exclude
    return self._filter_or_exclude(True, args, kwargs)
  File "/home/andres/.local/lib/python3.6/site-packages/django/db/models/query.py", line 961, in _filter_or_exclude
    clone._filter_or_exclude_inplace(negate, args, kwargs)
  File "/home/andres/.local/lib/python3.6/site-packages/django/db/models/query.py", line 966, in _filter_or_exclude_inplace
    self._query.add_q(~Q(*args, **kwargs))
  File "/home/andres/.local/lib/python3.6/site-packages/django/db/models/sql/query.py", line 1396, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "/home/andres/.local/lib/python3.6/site-packages/django/db/models/sql/query.py", line 1418, in _add_q
    split_subq=split_subq, check_filterable=check_filterable,
  File "/home/andres/.local/lib/python3.6/site-packages/django/db/models/sql/query.py", line 1350, in build_filter
    condition = self.build_lookup(lookups, col, value)
  File "/home/andres/.local/lib/python3.6/site-packages/django/db/models/sql/query.py", line 1196, in build_lookup
    lookup = lookup_class(lhs, rhs)
  File "/home/andres/.local/lib/python3.6/site-packages/django/db/models/lookups.py", line 25, in __init__
    self.rhs = self.get_prep_lookup()
  File "/home/andres/.local/lib/python3.6/site-packages/django/db/models/fields/related_lookups.py", line 117, in get_prep_lookup
    self.rhs = target_field.get_prep_value(self.rhs)
  File "/home/andres/.local/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 1827, in get_prep_value
    ) from e

Exception Type: ValueError at /wallacar_app/ajax/doors/
Exception Value: Field 'doors' expected a number but got ''.

models.py

class Coche(models.Model):
    doors = models.ForeignKey('CocheDoors', on_delete=models.CASCADE)

class CocheDoors(models.Model):
    doors = models.IntegerField(verbose_name="Puertas", primary_key=True, validators=[RegexValidator(regex='^[0-9]{1}$',message="Las puertas solo pueden tener una cifra")])
    def __str__(self):
        return str(self.doors)

views.py

def getDoors(request):
    if request.method == "GET" and request.is_ajax():
        doors = Coche.objects.exclude(doors__isnull=True).exclude(doors__exact='').order_by('doors').values_list('doors').distinct()
        doors = [i[0] for i in list(doors)]
        data = {'doors':doors}
        return JsonResponse(data,status=200)

使用:Django 3.1.7、Python 3.6.9、Ajax、Postgresql 和 Django Rest 框架。我正在尝试做动态下拉过滤器。这不是我的应用程序的完整代码。我认为错误就在这里。
感谢您的帮助!

【问题讨论】:

    标签: django postgresql django-models django-rest-framework django-views


    【解决方案1】:

    您的字段 doors 定义为 IntegerFieldnull=Falseblank=False(默认情况下)。

    因此,您的代码的以下行是问题所在(为便于阅读而添加了中断):

    doors = Coche.objects \
        .exclude(doors__isnull=True) \
        .exclude(doors__exact='') \
        .order_by('doors') \
        .values_list('doors').distinct()
    

    .exclude(doors__exact='') 引发错误,因为 IntegerField 不能包含字符串,但您正在检查它是否等于空字符串 ''。这是不允许的。

    .exclude(doors__isnull=True) 不是必需的,只要您没有在模型的 doors 字段定义中设置 null=True

    【讨论】:

      猜你喜欢
      • 2021-08-31
      • 1970-01-01
      • 2021-07-03
      • 2021-06-03
      • 2021-01-22
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多