ValueError - Python Django - PullRequest
       5

ValueError - Python Django

0 голосов
/ 24 ноября 2018

Я прошел форумы и сделал некоторые изменения в моих кодах, но проблема все еще там.Я выполнял миграцию и производил миграции, и даже удалял миграцию и заново создавал ее.

Я также добавил 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 file:

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 Ответ

0 голосов
/ 24 ноября 2018

Проблема в том, что вы захватываете регулярное выражение для 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'),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...