2016-02-15 25 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'), 
相關問題