Получение ошибки атрибута в django. как это решить?

Получение ошибки атрибута в модели в django. Когда я попытался вызвать model.get_absolute_url в шаблонах model_list, он говорит, что у модели нет атрибута "id". В то время как в модели я также правильно написал и url mapper и функцию представления, включая шаблоны detals. исключение указывало на эту обратную строку Это модель в файле models.py

class Post(models.Model): 
    title=models.CharField(max_length=200,help_text="Write your title",primary_key=True)
    caption=models.TextField(help_text="Write something")
    image=models.FileField(blank=True)
    post_date=models.DateField(auto_now=True)
    class Meta:
        ordering=['post_date']
    def __str__(self):
        return self.title
    def __str__(self):
        return self.caption
    def get_absolute_url(self):
        return reverse('post-detail', args=[str(self.id)])

#here is the url path

urlpatterns +=[
    path('posts',views.PostListView.as_view(),name="post-list"),
    path('post/<int:pk>',views.PostDetailView.as_view(),name="post-detail")
    ]

Расширяя комментарий Виллема Ван Онсема, перепишите модель, как вы уже сделали, из вашего последнего комментария,

class Post(models.Model): 
    title=models.CharField(max_length=200,help_text="Write your title")
    caption=models.TextField(help_text="Write something")
    image=models.FileField(blank=True)
    post_date=models.DateField(auto_now=True)
    class Meta:
        ordering=['post_date']
    def __str__(self):
        return self.title
    def __str__(self):
        return self.caption
    def get_absolute_url(self):
        return reverse('post-detail', args=[str(self.id)])

#here is the url path

urlpatterns +=[
    path('posts',views.PostListView.as_view(),name="post-list"),
    path('post/<int:pk>',views.PostDetailView.as_view(),name="post-detail")
    ]

Теперь о том, как справиться с ошибкой, которую вы получите после выполнения этого действия. Если вы находитесь в процессе разработки и у вас нет данных в базе данных, которые нужно сохранить, вы можете удалить и воссоздать всю базу данных и заново выполнить команды:

    python manage.py makemigrations
    python manage.py migrate

or,

    python manage.py flush

Источник: https://docs.djangoproject.com/en/4.0/ref/django-admin/#flush

Обратите внимание, что это приведет к удалению всех данных из вашей базы данных. Если вам нужно сохранить данные, ознакомьтесь с принятым ответом S. здесь:

Выгрузите ваши данные в JSON-файлы. Используйте внутренние инструменты Django django-admin.py для этого. Вы должны создать один файл выгрузки для каждой таблицы, которая будет изменяться, и каждой таблицы, которая зависит от ключа, который создается. Отдельные файлы делают это немного проще.

Выгрузите таблицы, которые вы собираетесь изменить из старой схемы.

В таблицах, которые зависят от этих таблиц, будут изменены их FK; вы можете вы можете либо обновить строки на месте, либо - что может быть проще - удалить и вставить эти строки заново.

Создайте новую схему. При этом будут созданы только те таблицы, которые изменяются.

Напишите скрипты для чтения и перезагрузки данных с новыми ключами. Эти скрипты короткие и очень похожие. Каждый сценарий будет использовать json.load() для чтения объекты из исходного файла; затем вы создадите свои объекты схемы из кортежей JSON, которые были созданы для вас. Затем вы можете вставить их в базу данных.

У вас есть два случая.

Таблицы с измененными PK будут вставлены и получат новые PK. PK. Они должны быть "каскадированы" в другие таблицы, чтобы гарантировать, что FK других таблиц также будут изменены.

Таблицы с изменяющимися FK должны будут найти строку во внешней таблице и обновить свою ссылку FK. внешней таблице и обновить свою ссылку FK.

Альтернатива.

Переименуйте все старые таблицы.

Создайте всю новую схему.

Напишите SQL для миграции всех данных из старой схемы в новую. Этот придется ловко переназначать ключи по ходу дела.

Отбросьте переименованные старые таблицы.

Вернуться на верх