Получение ошибки атрибута в 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 для миграции всех данных из старой схемы в новую. Этот придется ловко переназначать ключи по ходу дела.
Отбросьте переименованные старые таблицы.