2017-12-28 39 views
0

DjangoはPOST要求ごとに一貫してValueErrorをサーバーに送信しています。フォームやSEの周りを巡ることから、これは私のDjangoモデルの問題のようです。しかし、なぜこのモデルがこのエラーを投げるか、またはPOSTイベントでスローされるのでDjangoによって呼び出される理由はわかりません。問題のDjango raise ValueError:POST時に基数10のint()のリテラルが無効

ビュー:

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: '' 

すべてのヘルプやアイデアは本当にこの1に私の頭を悩ま、いただければ幸いです。

+0

エラーは、 'file" /home/django/weblogs/log/views.py "、96行目、' json_data = serializers.serialize( "json"、list(reverse.(Line.objects。 filter:(latest_line_id、latest_line_id、channel = channel).order_by( ' - id')[)]) ' –

+0

' latest_line_id'の値は何ですか?トレースバックは整数ではない可能性があり、エラーの原因となります。 –

答えて

1

ギレルモ・シャモロとポケット・キングズの両方が私のためにキャッチを見つけました。私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") 

論理的に呼び出されることはありませされないにも関わらず、両方のreponsdersはValueError障害がDjangoはそれにもかかわらずしようと起因していることが正しいですjson_dataを評価してください。

が空白の場合(これはPOSTリクエストの場合と同様)''に設定され、このIDに基づいてdbクエリを実行しようとするとDjangoによってValueErrorがトリガーされます。これは、($python manage.py shellを使用して)Djangoのシェルにあなたのフィルタ自身を照会しようとしていることで証明することができます。

(注:Djangoのシェルを使用している場合、from <yourapp>.models import <yourModel>ようなもので、あなたのモデルをインポートすることを忘れないでください)

>>> 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: '' 

あなたの意見を編集する際には、非常に勤勉であり、すべての論理ブロックをチェックして、トレースバックを読む際には注意してください(目の余分なペアは;)に役立ちます)。うまくいけば私の見落としは、私が失った時に他の誰かを救うことができる。

関連する問題