ValueError - Python Django
Я прошел форумы и сделал некоторые изменения в моих кодах, но проблема все еще там. Я сделал миграцию и сделал миграцию, и даже удалил миграцию и воссоздаю ее снова.
Я также добавил default=0 в код models.py:
age = models.PositiveIntegerField (по умолчанию =0)
Я буду признателен вам, если вы поможете мне в этом вопросе. Это несколько строк кода, дайте мне знать, если вам нужна другая информация.
Это ошибка:
ValueError at /basic_app/create/
invalid literal for int() with base 10: 'create'
Request Method: GET
Request URL: http://127.0.0.1:8000/basic_app/create/
Django Version: 2.1.2
Exception Type: ValueError
Exception Value:
invalid literal for int() with base 10: 'create'
Exception Location: C:\ProgramData\Miniconda3\envs\myDjanEnv\lib\site-packages\django\db\models\fields\__init__.py in get_prep_value, line 965
Python Executable: C:\ProgramData\Miniconda3\envs\myDjanEnv\python.exe
Python Version: 3.7.0
Python Path:
['C:\\Users\\Administrator\\Desktop\\django_lecture\\djan_advance\\advcbv',
'C:\\ProgramData\\Miniconda3\\envs\\myDjanEnv\\python37.zip',
'C:\\ProgramData\\Miniconda3\\envs\\myDjanEnv\\DLLs',
'C:\\ProgramData\\Miniconda3\\envs\\myDjanEnv\\lib',
'C:\\ProgramData\\Miniconda3\\envs\\myDjanEnv',
'C:\\ProgramData\\Miniconda3\\envs\\myDjanEnv\\lib\\site-packages']
Это файл __init__.py, строка 960-965:
def get_prep_value(self, value): from django.db.models.expressions import OuterRef value = super().get_prep_value(value) if value is None or isinstance(value, OuterRef): return value return int(value)
Файл models.py:
from django.db import models
# Create your models here.
class School(models.Model):
name = models.CharField(max_length=128)
principal = models.CharField(max_length=128)
location = models.CharField(max_length=128)
def __str__(self):
return self.name
class Student(models.Model):
name = models.CharField(max_length=128)
age = models.PositiveIntegerField()
school = models.ForeignKey(School,related_name='students',on_delete=models.PROTECT)
def __str__(self):
return self.name
Файл urls.py в папке basic_app:
from django.conf.urls import url
from basic_app import views
app_name = 'basic_app'
urlpatterns = [
url(r'^$',views.schoolListView.as_view(),name='list'),
url(r'^(?P<pk>[-\w]+)/$',views.schoolDetailView.as_view(),name='detail'),
url(r'^create/$',views.schoolCreateView.as_view(),name='create')
]
файл views.py:
from django.shortcuts import render
from django.views.generic import (View,TemplateView,
ListView,DetailView,
CreateView,UpdateView,
DeleteView)
from . import models
class IndexView(TemplateView):
template_name = 'index.html'
class schoolListView(ListView):
context_object_name = 'schools'
model = models.School
class schoolDetailView(DetailView):
context_object_name = 'school_detail'
model = models.School
template_name = 'basic_app/school_detail.html'
class schoolCreateView(CreateView):
fields = ('name','principal','location')
model = models.School
1 ответ
Проблема в том, что вы захватили регулярное выражение для pk
в подробном маршруте в urls.py, особенно в этой строке:
url(r'^(?P<pk>[-\w]+)/$',views.schoolDetailView.as_view(),name='detail'),
Я думаю ты имел ввиду [-\w]
как не альфа-символы, но это ищет дефис (-
) или любой буквенный, цифровой или символ подчеркивания (\w
). Таким образом, когда вы идете на маршрут /basic_app/create/
, 'create'
соответствует шаблону [-\w]+
и используется в качестве первичного ключа. поскольку 'create'
состоит из буквенных символов и не может быть приведен к целому числу, вы получаете ошибку "invalid literal for int() with base 10: 'create'"
,
Чтобы исправить это, я думаю, вы захотите сопоставлять только числовые символы для подробного маршрута. Вы могли бы сделать что-то вроде:
url(r'^(?P<pk>\d+)/$',views.schoolDetailView.as_view(),name='detail'),