Поле ‘id’ ожидало число, но получило ‘создать’

#python #django

#python #django

Вопрос:

Я пытался создать этот объект модели, но продолжаю получать эту ошибку: поле ‘id’ ожидало число, но получило ‘create’. Изображение ошибки приведено ниже. Я использую djangi 3.0.3 view.py файл:-

 from django.shortcuts import render
from . import models
from django.views.generic import (View,TemplateView,ListView,DetailView,
                                    CreateView,UpdateView,DetailView)

# Create your views here.
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

  

model.py

 from django.db import models
from django.urls import reverse
# Create your models here.

class School(models.Model):
    name = models.CharField(max_length=265)
    principal = models.CharField(max_length=256)
    location = models.CharField(max_length=256)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse("basic_app:detail", kwargs={'pk':self.pk})

class Student(models.Model):
    name = models.CharField(max_length=256)
    age = models.PositiveIntegerField()
    school = models.ForeignKey(School, related_name='student', on_delete=models.CASCADE)

    def __str__(self):
        return self.name

  

ошибка вывода

Любая помощь будет заметна Спасибо и с уважением Виплав Дубе

Комментарии:

1. Пожалуйста, укажите, что именно вы получаете и в каком случае

2. Извините, что передаю неполную информацию

Ответ №1:

Нажмите здесь для получения изображения кода, если вы используете path, в urls.py в папке приложения следуйте коду на картинке. Это устранило проблему для меня.

Комментарии:

1. Привет, Аман, пожалуйста, скопируйте код в вопрос, чтобы люди могли помочь вам напрямую, в StackOverflow.

Ответ №2:

Это похоже на ошибку с вашим urls.py . Просто убедитесь, что при указании URL-адресов в вашем urls.py окончательные пути появляются первыми, а переменные пути появляются позже. Здесь, например, этот код выдаст вам ошибку:

 path('<int:id>/' , view.DetailView.as_view(), name="detail")
path('create/' , view.CreateView.as_view(), name="create")
  

Чтобы избежать ошибки, просто измените порядок следующим образом:

 path('create/' , view.CreateView.as_view(), name="create")
path('<int:id>/' , view.DetailView.as_view(), name="detail")
  

Это происходит так, потому что в более поздней части кода django будет искать path / create, и если он не сможет его сопоставить, он будет искать path int:id/ . Теперь, поскольку int:id/ является переменной, если django должен был сначала ее искать, он попытался бы присвоить «create» переменной id, что приведет к проблеме с проверкой.

Ответ №3:

В appurls.py напиши это

 path('<int:pk>/', views.SchoolDetailView.as_view(), name='detail')