2016-02-15 26 views
0

我试图创建forms.py文件,新视图等,但当我点击我的网站链接上创建“新车”我得到一个错误:无效的文字为int()与基10:'新'

ValueError at /car/new/ 

invalid literal for int() with base 10: 'new' 

我在文档中搜索了解决方案几次,但它看起来应该 - 所以如何修复?

model.py

class Vehicle(models.Model): 
    name = models.CharField(max_length=50) 
    slug = models.SlugField(max_length=50) 
    description = models.TextField() 
    icon = models.ImageField(upload_to='icons/images/') 

class Car(models.Model): 
    name = models.CharField(max_length=50) 
    slug = models.SlugField(max_length=50) 
    description = models.TextField(default='Car', max_length=1000) 
    icon = models.ImageField(upload_to='icons/images', blank=True) 
    vehicle = models.ForeignKey('Vehicle') 

urls.py:

url(r'^car/new/$', views.car_new, name='car_new'), 

views.py:

def car_new(request): 
    if request.method == "POST": 
     form = CarForm(request.POST, request.FILES) 
     if form.is_valid(): 
      car = form.save(commit=False) 
      car.save() 
      form.save_m2m() 
      return redirect('website.views.car_detail', pk=car.pk) 
    else: 
     form = CarForm() 
    return render(request, 'website/car_new.html', {'form': form}) 

forms.py:

class CarForm(forms.ModelForm): 
    vehicle = forms.ModelChoiceField(label="Vehicle", queryset=Vehicle.objects.all()) 

    class Meta: 
     model = Car 
     fields = ('name', 'description', 'icon', 'vehicle',) 

car_new.html:

{% block content %} 
     <div> 
      <form method="post" enctype="multipart/form-data">{% csrf_token %} 
       {{ form.as_p }} 
       <button type="submit" class="save btn btn-default">OK</button> 
      </form> 
     </div> 
{% endblock %} 

Line in base.html file:

<a href="/car/new">New car</a> 
Traceback: 

File "C:\Users\name\djangofolder\venv\lib\site-packages\django\core\handlers\base.py" in get_response 
    149.      response = self.process_exception_by_middleware(e, request) 

File "C:\Users\name\djangofolder\venv\lib\site-packages\django\core\handlers\base.py" in get_response 
    147.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "C:\Users\name\djangofolder\myproject\website\views.py" in car_detail 
    23.  car = get_object_or_404(Car, pk=pk) 

File "C:\Users\name\djangofolder\venv\lib\site-packages\django\shortcuts.py" in get_object_or_404 
    155.   return queryset.get(*args, **kwargs) 

File "C:\Users\name\djangofolder\venv\lib\site-packages\django\db\models\query.py" in get 
    378.   clone = self.filter(*args, **kwargs) 

File "C:\Users\name\djangofolder\venv\lib\site-packages\django\db\models\query.py" in filter 
    790.   return self._filter_or_exclude(False, *args, **kwargs) 

File "C:\Users\name\djangofolder\venv\lib\site-packages\django\db\models\query.py" in _filter_or_exclude 
    808.    clone.query.add_q(Q(*args, **kwargs)) 

File "C:\Users\name\djangofolder\venv\lib\site-packages\django\db\models\sql\query.py" in add_q 
    1243.   clause, _ = self._add_q(q_object, self.used_aliases) 

File "C:\Users\name\djangofolder\venv\lib\site-packages\django\db\models\sql\query.py" in _add_q 
    1269.      allow_joins=allow_joins, split_subq=split_subq, 

File "C:\Users\name\djangofolder\venv\lib\site-packages\django\db\models\sql\query.py" in build_filter 
    1203.    condition = self.build_lookup(lookups, col, value) 

File "C:\Users\name\djangofolder\venv\lib\site-packages\django\db\models\sql\query.py" in build_lookup 
    1099.     return final_lookup(lhs, rhs) 

File "C:\Users\name\djangofolder\venv\lib\site-packages\django\db\models\lookups.py" in __init__ 
    19.   self.rhs = self.get_prep_lookup() 

File "C:\Users\name\djangofolder\venv\lib\site-packages\django\db\models\lookups.py" in get_prep_lookup 
    57.   return self.lhs.output_field.get_prep_lookup(self.lookup_name, self.rhs) 

File "C:\Users\name\djangofolder\venv\lib\site-packages\django\db\models\fields\__init__.py" in get_prep_lookup 
    744.    return self.get_prep_value(value) 

File "C:\Users\name\djangofolder\venv\lib\site-packages\django\db\models\fields\__init__.py" in get_prep_value 
    976.   return int(value) 

Exception Type: ValueError at /car/new/ 
Exception Value: invalid literal for int() with base 10: 'new' 

car_detail.py

def car_detail(request, pk): 
    car = get_object_or_404(Car, pk=pk) 
    return render(request, 'website/car_detail.html', {'car': car}) 
+1

你需要经过完整的堆栈跟踪,这里有太多的代码,很难说它发生在哪里 –

+0

但是你确实有一个bug'return redirect('website.views.car_detail',pk = car .pk)',你应该使用'reverse'来解释你的url的真实路径。https://docs.djangoproj ect.com/en/1。9/ref/urlresolvers /#reverse –

+0

感谢您的建议,我编辑了主帖,我在traceback中看到了一些与new_car视图有关的东西,所以我也粘贴它。 – znawca

回答

0

你应该学会阅读回溯。以下是错误:

car = get_object_or_404(Car, pk=pk) 

,并在发生错误:

File "C:\Users\name\djangofolder\myproject\website\views.py" in car_detail 

您在URL通过pk作为字符串new,但你的car_detail方法希望它代表的Car的PK整数。如果再次阅读错误消息,它应该更有意义。

1

/car/new/的网址是对您的car_detail的看法,而不是对car_new的看法。

您还没有表现出你的URL模式,所以我不能给出一个确切的答案,但你也许可以通过执行以下任一解决该问题:

  1. 移动car_detail上述car_new网址视图。 。
  2. 更改正则表达式的主键,以便它仅匹配数字(此刻,你可能使用类似\w+,它匹配的字符串像new

把它们一起,你是这样的:

url(r'^car/new/$', views.car_new, name='car_new'), 
url(r'^car/(?P<pk>\d+)/$', views.car_detail, name='car_detail'), 
相关问题