【发布时间】:2022-01-15 22:25:47
【问题描述】:
在 django 中的模型中获取属性错误。当我尝试在我的 model_list 模板中调用 model.get_absolute_url 时,它说模型没有属性“id” 在模型中,我还正确编写了 url 映射器和视图函数,包括详细信息模板 异常指向这条反向线 这是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")
]
【问题讨论】:
-
分享相关模型和URL路径。
-
我已经编辑了帖子,它现在包含模型和 url 路径
-
通过将
title设为主键,Django不会添加id作为主键,只有你自己不指定主键时才会这样,所以没有@987654324 @ 模型中的字段,主键现在是string,不再是int。 -
那么如何通过将标题主键设置为 False 来解决这个问题?
-
从标题中删除主键后,这是我从终端对 makemigrations 请求的响应 * $ python manage.py makemigrations 您正在尝试添加一个不可为空的字段 'id'无默认发布;我们不能这样做(数据库需要一些东西来填充现有的行)。请选择一个修复:1)现在提供一次性默认值(将在所有现有行上设置此列的空值)2)退出,让我在 models.py 中添加默认值 选择一个选项:*