2015-08-29 61 views
1

我正在用int()修復無效文字問題。django int()與基數爲10的無效文字get_prep_value

它最初的工作,但比我改變了一些,現在我得到這個問題。我從一開始就設置了這個項目,並且再次從零開始設置了數據庫,但它沒有幫助。

這裏是我的代碼:

models.py

from django.db import models 

# Create your models here. 
class Zone(models.Model): 
    zone_name = models.CharField(max_length = 10) 
    zone_number = models.CharField(max_length = 10) 

    class Meta: 
     ordering = ('zone_name',)  

    def __unicode__(self): 
     return self.zone_name 


class Stage(models.Model): 
    stage_number = models.CharField(max_length = 10) 
    stage_name = models.CharField(max_length = 10) 
    zones = models.ManyToManyField(Zone, through='ZoneStage') 

    class Meta: 
     ordering = ('stage_number',)  

    def __unicode__(self): 
     return self.stage_number 


class ZoneStage(models.Model): 
    zone = models.ForeignKey(Zone) 
    stage = models.ForeignKey(Stage) 
    value = models.PositiveSmallIntegerField(default=0) 

    class Meta: 
     ordering = ('zone',)   

    def __unicode__(self): 
     return '%s %s' % (self.zone, self.stage) 

views.py

from django.shortcuts import get_object_or_404, render 
from django.http import HttpResponseRedirect 
from django.core.urlresolvers import reverse 
from django.views import generic 

from models import Zone, Stage, ZoneStage 
#from models import SubStage, ZoneSubStage 

class IndexView(generic.ListView): 
    template_name = 'autostages/index.html' 
    context_object_name = 'stages' 
    queryset = Stage.objects.order_by('stage_number')[:12] 

    def get_context_data(self, **kwargs): 
     context = super(IndexView, self).get_context_data(**kwargs) 
     context['zones'] = Zone.objects.all() 
     context['zone_stages'] = ZoneStage.objects.all() 
#  context['substages'] = SubStage.objects.all() 

     # And so on for more models 
     return context  


class DetailView(generic.DetailView): 
    template_name = 'autostages/detail.html' 
    context_object_name = 'stages' 
    queryset = Stage.objects.all() 

    def get_context_data(self, **kwargs): 
     context = super(DetailView, self).get_context_data(**kwargs) 
     context['zones'] = Zone.objects.all() 
#  context['zone_substages'] = ZoneSubStage.objects.all() 
#  context['substages'] = SubStage.objects.all() 

     # And so on for more models 
     return context 

urls.py

from django.conf.urls import url 

from . import views 


urlpatterns = [ 
    url(r'^$', views.IndexView.as_view(), name='stage_list'), 
    url(r'^(?P<pk>\w+)/$', views.DetailView.as_view(), name='detail'), 
    ] 

的index.html

<table border="1"> 
    <tr> 
     <td style="width:40px" > 
     <td style="width:100px"> 
     {% for zone in zones|dictsort:"zone_name" %} 
      <td style="width:40px" align="center">{{ zone.zone_name }}</td> 
     {% endfor %} 
     </tr> 
     {% for stage in stages %} 
     <tr> 
      <td style="width:40px"><a href="{% url 'autostages:detail' stage %}">{{ stage.stage_number }} 
      </a></td> 
      <td style="width:40px">{{ stage.stage_name }}</td> 

       {% for zone in zones|dictsort:"zone_name" %} 
        <td style="width:40px" align="center"> 
        {% for zs in stage.zonestage_set.all %} 
        {% if zs.zone == zone %} {{ stage.value}}{% endif %} 
        <!--{% if zs.zone == zone %} {{ zs.value}}{% endif %}--> 
        {% endfor %} 
        </td> 
       {% endfor %} 
     </tr> 
    {% endfor %} 
    </table> 

detail.html

<table border="1"> 
    <tr> 
     <td style="width:40px"></td> 
     <td style="width:100px"></td>  

     {% for zone in zones|dictsort:"zone_name" %} 
     {{ zone }} 
      <td style="width:40px" align="center">{{ zone.zone_name }}</td> 
     {% endfor %} 

     </tr> 
       <td style="width:40px">{{ stages }}</td> 
     <td style="width:100px">{{ stages.stage_name }}</td> 
     {% for substage in stages.substage_set.all %} 
     <tr> 
      <td style="width:40px"></td> 
      <td style="width:40px">{{ substage.sub_name }}</td> 
       {% for zone in zones|dictsort:"zone_name" %} 
        <td style="width:40px" align="center"> 
        {% for zss in substage.zonesubstage_set.all %} 
        {% if zss.zone == zone %} {{ zss.value}}{% endif %} 
        {% endfor %} 
        </td> 
       {% endfor %} 

    </tr> 

{% endfor %} 
</table> 

Django的回溯:

Environment: 


Request Method: GET 
Request URL: http://localhost:8000/autostages/S1/ 

Django Version: 1.8.4 
Python Version: 2.7.6 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'autostages') 
Installed Middleware: 
('django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
'django.middleware.security.SecurityMiddleware') 


Traceback: 
File "/home/dkr103/Coding/projects/env1/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/home/dkr103/Coding/projects/env1/local/lib/python2.7/site-packages/django/views/generic/base.py" in view 
    71.    return self.dispatch(request, *args, **kwargs) 
File "/home/dkr103/Coding/projects/env1/local/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch 
    89.   return handler(request, *args, **kwargs) 
File "/home/dkr103/Coding/projects/env1/local/lib/python2.7/site-packages/django/views/generic/detail.py" in get 
    115.   self.object = self.get_object() 
File "/home/dkr103/Coding/projects/env1/local/lib/python2.7/site-packages/django/views/generic/detail.py" in get_object 
    38.    queryset = queryset.filter(pk=pk) 
File "/home/dkr103/Coding/projects/env1/local/lib/python2.7/site-packages/django/db/models/query.py" in filter 
    679.   return self._filter_or_exclude(False, *args, **kwargs) 
File "/home/dkr103/Coding/projects/env1/local/lib/python2.7/site-packages/django/db/models/query.py" in _filter_or_exclude 
    697.    clone.query.add_q(Q(*args, **kwargs)) 
File "/home/dkr103/Coding/projects/env1/local/lib/python2.7/site-packages/django/db/models/sql/query.py" in add_q 
    1309.   clause, require_inner = self._add_q(where_part, self.used_aliases) 
File "/home/dkr103/Coding/projects/env1/local/lib/python2.7/site-packages/django/db/models/sql/query.py" in _add_q 
    1337.      allow_joins=allow_joins, split_subq=split_subq, 
File "/home/dkr103/Coding/projects/env1/local/lib/python2.7/site-packages/django/db/models/sql/query.py" in build_filter 
    1208.    condition = self.build_lookup(lookups, col, value) 
File "/home/dkr103/Coding/projects/env1/local/lib/python2.7/site-packages/django/db/models/sql/query.py" in build_lookup 
    1101.     return final_lookup(lhs, rhs) 
File "/home/dkr103/Coding/projects/env1/local/lib/python2.7/site-packages/django/db/models/lookups.py" in __init__ 
    101.   self.rhs = self.get_prep_lookup() 
File "/home/dkr103/Coding/projects/env1/local/lib/python2.7/site-packages/django/db/models/lookups.py" in get_prep_lookup 
    139.   return self.lhs.output_field.get_prep_lookup(self.lookup_name, self.rhs) 
File "/home/dkr103/Coding/projects/env1/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py" in get_prep_lookup 
    727.    return self.get_prep_value(value) 
File "/home/dkr103/Coding/projects/env1/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py" in get_prep_value 
    985.   return int(value) 

Exception Type: ValueError at /autostages/S1/ 
Exception Value: invalid literal for int() with base 10: 'S1' 
+1

你以某種方式做'int(「S1」)',這顯然不起作用。 –

+0

是'S1'階段號碼? –

+0

我只是仔細檢查一下。最初我在Stage stage_number字段中有primary_key = True。我刪除它,這是什麼導致我的問題。現在我又添加了它,問題消失了。我不想使用primary_key = True,我想從該字段中刪除它,但我不知道如何解決我所得到的問題。 – BlueTomato

回答

1

我認爲你錯誤地通過了stage對象而不是stage.pk作爲頁面中url模板標籤的參數。

嘗試改變

{% url 'autostages:detail' stage %} 

{% url 'autostages:detail' stage.pk %} 

其實,當你路過stage對象作爲參數,則其表示您已在模型中定義即stage_number正被用作論證的價值。 S1不是一個整數導致錯誤。

+1

是的,就是這樣。它有助於。如果我現在使用stage.pk或stage.id,它將起作用。歡呼求救!所以,我猜這個問題是由傳遞字符串而不是int值造成的。 – BlueTomato

+0

是的,對象的表示,即'stage_number'被用作導致錯誤的'pk'的值。 –

0

Normaly你,當你試圖添加或閱讀這個問題數據與int字段模式ls在你的情況下驗證該值字段只接收正值小int

相關問題