Django总是在向服务器发送的每个POST请求上抛出<code>ValueError</code>。从浏览表单和SE来看,这似乎是我的Django模型的一个问题。但是,我不确定为什么模型会抛出这个错误,或者为什么Django会调用它们,因为这是在POST事件中抛出的。
有问题的视图:
def channel(request, channel):
user_form = weblog_userForm(request.POST or None)
if request.method == 'POST' and user_form.is_valid():
nickname = user_form.cleaned_data['nickname']
message = user_form.cleaned_data['message']
password = user_form.cleaned_data['password']
postDetails = {}
... process request and eventually ...
return HttpResponse(json.dumps(postDetails), content_type="application/json")
我的应用程序模型:
class Line(models.Model):
message = models.TextField(blank=True, default="")
nick = models.CharField(max_length=50)
hostname = models.CharField(max_length=300)
channel = models.CharField(max_length=200)
timestamp = models.DateTimeField(auto_now_add=True)
LINE_TYPES = (
('PMSG', 'PRIVMSG'),
('SMSG', 'SOCKETMSG'),
('WMSG', 'WEBMSG'),
('NTCE', 'NOTICE'),
('ACTN', 'ACTION'),
('JOIN', 'JOIN'),
('PART', 'PART'),
('QUIT', 'QUIT'),
('NICK', 'NICK'),
('TPIC', 'TOPIC'),
)
msgType = models.CharField(max_length=4, choices=LINE_TYPES, default='PRIVMSG')
def __str__(self):
return self.message
class banned_ips(models.Model):
bannedIp = models.GenericIPAddressField()
追溯:
Traceback (most recent call last): File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/exception.py", line 35, in inner response = get_response(request) File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", line 128, in _get_response response = self.process_exception_by_middleware(e, request) File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", line 126, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/django/weblogs/log/views.py", line 96, in channel json_data = serializers.serialize("json", list(reversed(Line.objects.filter(id__gt=latest_line_id, channel=channel).order_by('-id')[:100]))) File "/usr/local/lib/python3.5/dist-packages/django/db/models/manager.py", line 82, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) File "/usr/local/lib/python3.5/dist-packages/django/db/models/query.py", line 836, in filter return self._filter_or_exclude(False, *args, **kwargs) File "/usr/local/lib/python3.5/dist-packages/django/db/models/query.py", line 854, in _filter_or_exclude clone.query.add_q(Q(*args, **kwargs)) File "/usr/local/lib/python3.5/dist-packages/django/db/models/sql/query.py", line 1252, in add_q clause, _ = self._add_q(q_object, self.used_aliases) File "/usr/local/lib/python3.5/dist-packages/django/db/models/sql/query.py", line 1276, in _add_q split_subq=split_subq, File "/usr/local/lib/python3.5/dist-packages/django/db/models/sql/query.py", line 1214, in build_filter condition = self.build_lookup(lookups, col, value) File "/usr/local/lib/python3.5/dist-packages/django/db/models/sql/query.py", line 1084, in build_lookup lookup = lookup_class(lhs, rhs) File "/usr/local/lib/python3.5/dist-packages/django/db/models/lookups.py", line 18, in __init__ self.rhs = self.get_prep_lookup() File "/usr/local/lib/python3.5/dist-packages/django/db/models/lookups.py", line 68, in get_prep_lookup return self.lhs.output_field.get_prep_value(self.rhs) File "/usr/local/lib/python3.5/dist-packages/django/db/models/fields/__init__.py", line 947, in get_prep_value return int(value) ValueError: invalid literal for int() with base 10: ''
任何帮助或想法都将不胜感激,这真的让我摸不着头脑。
吉列尔莫·查莫罗和口袋国王都在这里为我找到了陷阱。在我的 views.py
截图中发布的(看似不相关的)逻辑块中,是以下代码:
if (request.is_ajax()):
latest_line_id = request.GET.get('latest_id', '')
if latest_line_id == '-1': # Return all lines
json_data = serializers.serialize("json", list(reversed(Line.objects.filter(channel=channel).order_by('-id')[:100])))
else:
json_data = serializers.serialize("json", list(reversed(Line.objects.filter(id__gt=latest_line_id, channel=channel).order_by('-id')[:100])))
return HttpResponse(json_data, content_type="application/json")
尽管在逻辑上从未被调用,但这两个响应程序都是正确的,因为<code>ValueError</code>失败源于Django,尽管如此,它们仍然试图计算<code〕json_data</code>。
如果latest_line_id
为空(就像在POST请求中一样),它将被设置为"
,这将在尝试基于此ID的数据库查询时触发Django的ValueError
。这可以通过尝试在Django shell中自己查询过滤器来证明(通过使用$python shell
)manage.py:
(注意:如果使用django shell,不要忘记从
>>> list(Line.objects.filter(channel="test").filter(id__lte='').order_by('id'))
Traceback (most recent call last):
...
ValueError: invalid literal for int() with base 10: ''
吸取了教训,编辑视图时要非常勤奋,记得仔细检查所有逻辑块,阅读回溯时要小心(一双额外的眼睛可以帮助;)
)。希望我的疏忽可以节省别人失去的时间。
我正在使用创建通知。根据我的文件: 在我的< code>urls.py中。我通过在我的视图中使用它来生成测试通知。py: 我可以轻松获取此url中的未读通知数量: 它返回,如我所愿。但是使用我无法获取通知列表,我收到此错误: 作为我使用任何帮助将不胜感激。 完全回溯 环境: 请求方法:GET请求URL:http://127.0.0.1:8000/inbox/notifications/api/un
给定一个有符号的32位整数x,返回其数字颠倒的x。如果反转x导致值超出有符号32位整数范围[-2**31, 2**31 - 1],则返回0。 假设环境不允许存储64位整数(有符号或无符号)。 这是我的意见书 int()方法应该允许我传递一个字符串值(“12”),但是它返回一个错误,说它是int()的无效文本。 第3行中的变量sp是str而不是float,所以我不知道为什么它不在leetcode提交
问题内容: 我正在创建一个读取文件的程序,如果文件的第一行不为空白,它将读取接下来的四行。在这些行上执行计算,然后读取下一行。如果该行不为空,则继续。但是,我收到此错误: 它正在读取第一行,但无法将其转换为整数。 我该怎么做才能解决此问题? 代码: 问题答案: 仅作记录: 我在这里…
问题内容: 我正在尝试做: 我得到以下错误: ValueError:以10为底的long()无效文字:‘12 .0’ 我的数据如下所示: 知道如何正确进行转换吗? 感谢帮助。 问题答案: 有一些值,无法将其转换为。 您可以使用并获得存在问题的价值: 如果需要检查值有问题的行,请与mask配合使用: 样品:
问题内容: 每次尝试编码时,它都有效,但是当我键入代码时,出现错误: ValueError:int()以10为基的无效文字:“停止” 问题答案: 传递给的字符串应仅包含数字: 一个快速的解决方法是在此处使用异常处理: 而且您可以使用匹配“ stop”的任何大小写组合:
问题内容: 我编写了一个程序来求解,然后将其投影在图形上。问题是,每当出现错误时: ValueError:int()以10为底的无效文字。 有什么建议? 这是回溯: 每当我输入一个小于1但大于0的数字时,就会出现问题。在此示例中为0.3。 这是我的代码: 问题答案: 您的回溯告诉您采用整数,您试图给出一个十进制数,因此您需要使用: 这应该按预期工作: 计算机以各种不同的方式存储数字。Python有